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的使用.

实际上这一步我没有完成, 后面有时间再继续更新吧......

最新文章

  1. stm32 usb error : identifier "bool" is undefined
  2. HTTP的长连接和短连接——Node上的测试
  3. [转]EasyUI——常见用法总结
  4. FormCreate & FormActivate & FormShow执行顺序演示
  5. 隐藏自定义的tabbar之后,push到B视图,B视图的键盘工具条无法响应点击事件
  6. TRUNCATE TABLE 与 DELETE table 区别
  7. oc语言--protocol(协议)
  8. 校园招聘 - 比較easy的面试题
  9. 【Node.js 自己封装的库 http_parse, libuv】
  10. 关于前端的photoshop初探的学习笔记
  11. 2018-2019-2 20165215《网络对抗技术》Exp5 MSF基础应用
  12. 六、Django模型基础第一节
  13. C/C++扩展Python的时候数据类型转换的对应:
  14. 自己总结的C#编码规范--6.格式篇
  15. android AsyncTask异步任务(笔记)
  16. Win10系统截屏快捷键
  17. VIVE pro和hololens购买调研
  18. MySQL--Checkpoint基础
  19. Python学习笔记之—— File(文件) 对象常用函数
  20. linux命令-grep+正则表达式用法

热门文章

  1. 贴一段Matlab代码
  2. Pytest权威教程15-运行Nose用例
  3. JVM 线程上下文类加载器
  4. 分库分表 or NewSQL数据库?终于看懂应该怎么选!【转】
  5. sql中order by和group by的区别
  6. python socketpool:通用连接池(转)
  7. Kotlin 之操作符重载
  8. typeScript模块<三>
  9. 004-行为型-04-迭代器模式(Iterator)
  10. pls_integer类型