webpack package code into different bundle
Demo4操作手册
本Demo演示如何进行分块打包等较高级的使用
准备环境
初始化环境, cd到demo1目录之后, 执行如下命令:
npm init -y
npm install webpack webpack-cli webpack-dev-server typescript ts-loader -D
新建tsconfig.json, 内容如下:
{
"compilerOptions": {
"target": "es5"
}
}
添加npm命令到package: ‘webpack-dev-server --open’.
L7 require.ensure
当一个应用的代码很多的时候, 我们把所有的代码都打包到一个文件, 似乎显得有点臃肿, 同时考虑到首页加载性能等其他原因, 按照一定规则把代码分开打包是很有必要的.
Webpack会使用require.ensure来定义各个分离的节点.
单个文件分离
在src目录下创建library1.ts和index.ts, 内容如下:
// library1.ts
export class Library {
hi() {
console.log('I\'m Library1.')
}
}
// index.ts
require.ensure(['./library1.ts'], function (require) {
var lib = require('./library1');
const ins = new lib.Library();
ins.hi();
});
新建webpack.config.js, 内容如下:
module.exports = {
entry: './src/index.ts',
output: {
filename: 'output.js'
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader'
}
]
}
}
执行webpack即可打包成功, 可以看到dist目录下有output和1.output两个文件.
多个文件分离
在之前文件的基础上新建library2.ts和library3.ts, 内容如下:
// library2.ts
export class Library {
hi() {
console.log('I\'m Library2.')
}
}
// library3.ts
export class Library {
hi() {
console.log('I\'m Library3.')
}
}
修改index.ts内容如下:
require.ensure(['./library1.ts'], function (require) {
var lib = require('./library1');
const ins = new lib.Library();
ins.hi();
});
require.ensure(['./library2.ts', './library3.ts'], function (require) {
var lib2 = require('./library2');
const ins2 = new lib2.Library();
ins2.hi();
var lib3 = require('./library3');
const ins3 = new lib3.Library();
ins3.hi();
});
执行webpack即可打包成功, 可以看到dist目录下有output、1.output和2.output三个文件.
放到浏览器去执行可以看到library2和library3打包进了1.output, 而library1打包进了2.output.
L8 bundle-loader
bundle-loader其实只是对require.ensure做了一个封装, 原理还是一样的, 安装:
npm install bundle-loader -S
修改webpack.config.js如下:
module.exports = {
entry: './src/bundle.ts',
output: {
filename: 'output.js'
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: 'bundle-loader'
}, {
loader: 'ts-loader'
}
]
}
]
}
}
在src目录新建bundle.ts, 内容如下:
require('./library1')(lib => {
const ins = new lib.Library();
ins.hi();
});
require('./library2')(lib => {
const ins = new lib.Library();
ins.hi();
});
require('./library3')(lib => {
const ins = new lib.Library();
ins.hi();
});
打包结果是library的1、2、3分别打包进了output的2、3、4.
L9 SplitChunksPlugin
当我们多个打包文件依赖同一个包时, 如果不是把所有包都分开打包, 那么很多被依赖的包可能被重复打包进其他的包, 这是时候就需要对公共代码进行单独打包了.
实际上之前各种资料介绍的都是CommonsChunkPlugin, 而她从V4开始已经被移除了, 所以下面介绍SplitChunksPlugin的使用.
实际上这一步我没有完成, 后面有时间再继续更新吧......
webpack package code into different bundle的更多相关文章
- E: The package code needs to be reinstalled, but I can't find an archive for it.
ubuntu安装软件时报错: E: The package code needs to be reinstalled, but I can't find an archive for it. 解决方法 ...
- 20、uwp打包失败(All app package manifests in a bundle must declare the same values under the XPath *[local-name()='Package']/*[local-name()='Dependencies'])
在给 uwp工程打商店包的时候,遇到了一个异常: Error info: error 80080204: All app package manifests in a bundle must decl ...
- webpack 和 code splitting
Code Splitting指的是代码分割,那么什么是代码分割,webpack和code splitting又有什么样的联系呢? 使用npm run dev:"webpack-dev-ser ...
- webpac4k运行webpack .\src\main.js .\dist\bundle.js打包出错
打包的命令格式:webpack 要打包的文件的路径 打包好的输出文件的路径 运行webpack .\src\main.js .\dist\bundle.js 提示错误,错误信息如下: WARNING ...
- webpack的code spliting与chunks
webpack的code spliting与chunks :https://blog.csdn.net/liuqi332922337/article/details/53020992
- Vue脚手架创建项目出现 (Failed to download repo vuejs-templates/webpack: Response code 404)
搭建好(脚手架2.X版本)环境像往常一样使用vue init webpack xxxx 创建项目可以是没多久就开始报错了 报错结果就是:vue-cli · Failed to download rep ...
- 解决 webpack .\src\main.js .\dist\bundle.js 错误
打包的命令格式:webpack 要打包的文件的路径 打包好的输出文件的路径 栗子: webpack .\src\main.js .\dist\bundle.js 提示错误,错误信息如下: 错误原因 w ...
- vue+webpack+VS Code入门简单的项目配置
为了方便,这边的编译器选择的是VS Code (Visual Studio Code); 打开VS Code,选择好自己的工作空间,然后新建一个文件夹作为我们项目的文件夹,然后,show time: ...
- webpack 利用Code Splitting 分批打包、按需下载
webpack中的解决方案——Code Splitting,简单来说就是按需加载(下载),如果是requireJS对应的AMD的方案中这本是在正常不过了.但是在webpack中All in one的思 ...
随机推荐
- shell编程题(二)
计算1-100之和 #!/bin/bash `;do #符号不是单引号 是 1左边的符号 sum=$[$i + $sum ] done echo $sum #!/bin/bash i= n=1 #定义 ...
- 【Python 代码】生成hdf5文件
import random from PIL import Image import numpy as np import os import h5py from PIL import Image L ...
- vue cli 静态资源导入 路径
1.public文件夹 使用绝对路径引入. 2.assets文件夹 使用相对路径引入. https://cli.vuejs.org/zh/guide/html-and-static-assets.ht ...
- sublime text3中如何使用PHP编译系统
[WinError 2] 系统找不到指定的文件 编译错误原因,是因为编译器没有配置 第一步: 添加php可执行程序所在目录到系统环境变量(具体方法此处省略,使用本文下面的说明中的方法,此步骤可以省略 ...
- python 与开源Gis 书本知识点测试
# -*- coding: utf-8 -*- print(u"python与开源QGis课题研究组")#print("汉字") #++++++++++++++ ...
- ubuntu18源码包安装openresty
author: headsen chen date : 2019-07-30 15:42:24 #在ubuntu18.04 环境下,openresty的依赖库有:PCRE.OpenSSL.zlib, ...
- solidity语言介绍以及开发环境准备
solidity语言介绍以及开发环境准备 Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...
- PostgreSQL中的 时间格式转化常识
下面的SQL文查询结果是 "2018-08-20 10:09:10.815125",并且返回类型可以当String处理.返回json等都方便使用. SQL> SELECT t ...
- 开源配置中心xxl-conf的核心原理分析
XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...
- 为什么一般hashtable的桶数会取一个素数
为什么一般hashtable的桶数会取一个素数 设有一个哈希函数H( c ) = c % N;当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候H( 11100(二进制) ) = H ...