使用dll:这个时候会多打一个library包,就是这里的Child vendor,他有738KB,
建立使用了1320msreact
这里的主要文件则变的很是小,建立使用了237mswebpack
当你修改了主要文件,那么你只须要从新编译主要文件中你修改的部分,这样会很是快,这里只使用15ms。git
没使用dll:github
你会发现这个时候,pageA和pageB都很是的大,由于他们都require了一个很大的包,
而使用了dll,则将这个大包抽离出来成为一个。建立使用了1412msweb
这里仅仅修改一点东西,却发现要回从新编译739kb的东西,这里仅仅是一个小文件,若是是一个大文件,那么将会很是的耗时,这里使用了62ms,那么若是文件很大的状况,将会很是影响build的速度。json
上图中,使用dll,那么他会将一些不须要频繁修改的文件编译成一个library包,那么全部使用到该library的文件大小都会大幅度的降低,以后修改文件后的编译速度将会很是的快。
若是是在手机app开发中,即可以将频繁修改的文件和不频繁修改的文件分离,这样每次更新只须要替换部分的包。windows
源码地址app
文件目录dom
|-dist |--dll |---生成文件的位置 |-pageA.js |-pageB.js |-pageC.js |-vendor.js |-vendor2.js |-webpack.config.dll.js |-package.json
/* eslint import/no-extraneous-dependencies: ["off"] */ const path = require('path'); const webpack = require('webpack'); // 文件的输出目录 const STATIC_SRC = 'dist'; // 文件输出的文件夹 const OUTPUT_PATH = 'dll'; // 控制是否开启分离模式 const main = [ { name: 'vendor', // 这里是须要打包成library包的文件入口 entry: [ './vendor.js', './vendor2.js', 'react', 'react-dom' ], // 打包后的输出位置和输出名字 output: { path: path.resolve(__dirname, STATIC_SRC, OUTPUT_PATH), filename: 'vendor.js', library: 'vendor_[hash]' }, plugins: [new webpack.DllPlugin({ name: 'vendor_[hash]', //这里的文件输出文件须要和DllReferencePlugin保持一致 path: path.resolve(__dirname, STATIC_SRC, OUTPUT_PATH, 'manifest.json') })], }, { name: 'app', dependencies: ['vendor'], entry: { pageA: './pageA', pageB: './pageB', pageC: './pageC' }, output: { path: path.resolve(__dirname, STATIC_SRC, OUTPUT_PATH), filename: '[name].js' }, plugins: [ new webpack.DllReferencePlugin({ // 这里须要保证路径与DllPlugin中生成的manifest路径一致,不然报错 manifest: path.resolve(__dirname, STATIC_SRC, OUTPUT_PATH, 'manifest.json') })] } ]; module.exports = main;
Optimizing Webpack build times and improving caching with DLL bundlespost