webpack2 还没研究好,就发现升级到4了,你咋这么快~

最近要做项目脚手架,项目构建准备重新做,因为之前写的太烂了...然后发现webpack大版本已经升到4了(又去看了一眼,4.5了),这么快的节奏,不适应啊...既然是新的,就用新的来吧,先跳过version3

webpack4 相对于之前的版本,有不少变化,其中包括一些不向下兼容的变化。具体哪些变化这里就不啰嗦了(4.0 changelog译文),今天主要记录一下 废除 commonChunksPlugin 之后,怎么使用 splitChunksPlugin && runtimeChunkPlugin

只记录到自己了解到的部分,不定期更新吧

splitChunksPlugin

splitChunksPlugin 默认配置项

{
"chunks": "all",
"minSize": 0,
"misChunks": 1,
"maxAsyncRequests": 1,
"maxInitialRequests": 1,
"name": undefined,
"automaticNameDelimiter": "~",
"filename": undefined,
"cacheGroups": {}
}

稍微来解释下各项配置:

  • chunks: all, async, initial 三选一, 插件作用的chunks范围
  • minSize: 最小尺寸
  • misChunks:最小chunks
  • maxAsyncRequests: 最大异步请求chunks
  • maxInitialRequests: 最大初始化chunks
  • name: split 的 chunks name
  • automaticNameDelimiter: 如果不指定name,自动生成name的分隔符(‘runtime~[name]’)
  • filename: ''
  • cacheGroups: 字面意思缓存组,主要配置在这里

cacheGroups配置项:

[key]: {
"priority": "缓存优先级权重",
"name": "split 出来的 chunk 的名字",
"chunks": "应该用范围",
"enforce": "未知",
"minSize": "最小尺寸",
"minChunks": "最小chunks",
"maxAsyncRequests": "",
"maxInitialRequests": "",
"filename": "最后output的文件名",
"reuseExistingChunk": "未知"
}

runtimeChunkPlugin

"runtimeChunk": {
"name": "manifest"
}

直接上例子了:

用不着的属性就不配置了,需要关联到 output 和 ExtractTextPlugin 配置

webpackConf: {
...,
output: {
path: path.join(process.cwd(), 'dist'),
publicPath,
filename: '[name].js',
chunkFilename: '[name].js'
},
optimization: {
splitChunks: {
chunks: 'initial', // 只对入口文件处理
cacheGroups: {
vendor: { // split `node_modules`目录下被打包的代码到 `page/vendor.js && .css` 没找到可打包文件的话,则没有。css需要依赖 `ExtractTextPlugin`
test: /node_modules\//,
name: 'page/vendor',
priority: 10,
enforce: true
},
commons: { // split `common`和`components`目录下被打包的代码到`page/commons.js && .css`
test: /common\/|components\//,
name: 'page/commons',
priority: 10,
enforce: true
}
}
},
runtimeChunk: {
name: 'page/manifest'
}
},
plugins: [
new ExtractTextPlugin({
filename: '[name].css',
ignoreOrder: true
}),
...
]
...
}

以上配置产出大致结构:

如果没有css文件,说明对应目录下没有相关css资源引用,或者未使用ExtractTextPlugin

dist
└── page
├── [commons.css]
├── commons.js
├── [manifest.css]
├── manifest.js
├── [vendor.css]
├── vendor.js
└── demo // entry 中 配置
├── index.css
└── index.js

写在最后

上边的例子是用的 optimization 配置项形式,你也可以用 plugin 形式,配置参数应该一样的。

之前搜索相关的配置,介绍的文章较少,有一些简单的demo,但总觉得不受用。

参考了不少文章,然后又大概读了 webpacksplitChunksPlugin 的源码,去了解了下都有哪些参数,看源码挺好

********************************** done **********************************

最新文章

  1. 用jmeter通过ssl验证访问https
  2. ORACLE 常见错误
  3. UIKit的外观属性及方法汇总
  4. Struts2框架下表单数据的流向以及映射关系
  5. Javascript 实现HTML字符串的储存
  6. 部署samba服务之后,在客户端用挂载访问的方式,错误信息:mount: block device //192.168.1.108/mysqldata is write-protected, mounting read-only mount: cannot mount block device //192.168.1.108/mysqldata read-only
  7. 自动装配Bean
  8. IE11下,IIS7.5不自动生成__doPostBack事件
  9. iOS - OC 语言新特性
  10. Java Servlet——改进的CGI
  11. Party at Hali-Bula
  12. nginx使用自认证的https证书
  13. csdn仍是"待定"对?
  14. redis - Sentinel 和 cluster
  15. DirectX11 With Windows SDK--11 混合状态与光栅化状态
  16. mysql中的concat,concat_ws(),group_concat()
  17. Oracle 修改数据库表数据提交之后进行回滚
  18. sqlserver 判断字符串是否是数字
  19. jQuery 簡介
  20. ScrollView match_parent不起作用

热门文章

  1. Mahout文本向量化
  2. AngularJS进阶(二十七)实现二维码信息的集成思路
  3. Leetcode_49_Anagrams
  4. Android中的Message机制
  5. 标准会话对象——StandardSession
  6. 【一天一道LeetCode】#14 Longest Common Prefix
  7. 【Visual C++】游戏编程学习笔记之六:多背景循环动画
  8. IDE
  9. 【Android 应用开发】BluetoothSocket详解
  10. SharePoint 2013 新建网站集图解(绝对菜鸟篇)