webpack3中:node
在这个项目中,webpack打包会包含三部分代码 一、pageA,pageB中的业务逻辑代码 二、webpack生成的代码 三、第三方库 如这里的lodash代码webpack
这时候须要三个CommonsChunkPlugin来提取三次公共代码,web
第一个 name为common,提取的是业务中重复代码,minChunks表示产生提取的最小重复次数,chunks表示从哪些地方提取ui
第二个 name为vendor,这里必须和entry中一致,表示提取的公共第三方库,minChunks设置infinity表示不判断代码重复次数spa
第三个 name为mainfest,表示提取webpack生成代码,minChunks设置无穷大,由于除了name 二三两项提取设置一致,能够合并为同一项插件
除了第二项名字要和entry中保持一致,第一和第三项的名字能够任意code
const webpack = require("webpack"); const path = require("path"); module.exports = { entry: { pageA: "./src/pageA.js", pageB: "./src/pageB.js", vendor:['lodash'] }, output: { path: path.resolve(__dirname, "dist"), filename: "[name].bundle.js", chunkFilename: "[name].chunk.js" }, plugins:[ new webpack.optimize.CommonsChunkPlugin({ name:'common', minChunks:2, chunks:['pageA','pageB'] }), new webpack.optimize.CommonsChunkPlugin({ names:['vendor','mainfest'], minChunks:Infinity }), ] };
运行后成功打包出第三方库 vendor.bundle.js 业务中公共代码common.bundle.js webpack生成代码 mainfest.bundle.jsblog
在webpack4中配置webpack4
const webpack = require("webpack"); const path = require("path"); module.exports = { entry: { pageA: "./src/pageA.js", pageB: "./src/pageB.js" }, output: { path: path.resolve(__dirname, "dist"), filename: "[name].bundle.js", chunkFilename: "[name].chunk.js" }, optimization: { splitChunks: { cacheGroups: { common: { name: "common", chunks: "all", minSize: 1, priority: 0 }, vendor: { name: "vendor", test: /[\\/]node_modules[\\/]/, chunks: "all", priority: 10 } }, }, runtimeChunk: { name: "manifest" } } };
webpack4中新增了optimization配置,it
splitChunks为webpack自带插件,这个名字就代表了插件的用途--分割代码块,
splitChunks.cacheGroups配置就是表示会提取到公共模块的一个集合,也就是一个提取规则。priority指处理的优先级,这里先处理第三方模块,再处理业务公共代码。
还有一个runtimeChunk也是webpack4新增,runtime就是运行环境,这里就会打包出一个叫mainfest的webpack运行公共代码,最后输出以下图