使用vue-cli默认配置打包项目的时候,会将用到的第三方库全部打包到vendor.js中,以至于vendor.js特别的大,LZ项目的vendor.js一度达到1.4M,打包的时候特别慢,所以想把一些比较大的库打包到单独的文件中,提高打包效率。这里我们使用 DllPlugin 和 DllReferencePlugin 达到想要的目的
新建dll.conf.js文件
配置参考官网:github文档
在build文件夹中新建dll.conf.js文件,我这里是需要将echarts和xxxx单独打包成单独的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| var path = require('path') var webpack = require('webpack')
module.exports = { //配置入口 entry: { echarts: [ 'echarts' ], xxxx:[ 'xxxx' ] }, //配置出口,这里将会把生成出来的dll文件放在/static/js中,会生成两个文件,echarts.dll.js,xxxx.dll.js output: { path: path.resolve(__dirname, '../static/js'), filename: '[name].dll.js', library: '[name]_library' }, //生成 manifest.json文件,会生成两个文件到build目录中,echarts-manifest.json,xxxx-manifest.json plugins: [ new webpack.DllPlugin({ path: path.join(__dirname, '.', '[name]-manifest.json'), name: '[name]_library', context:__dirname }) ] }
|
在新建完成dll.conf.js文件之后,我们就可以先把文件打包出来,命令:
1
| webpack --config build/dll.conf.js
|
这里我们可以添加命令到pakage.json中,避免每次都输入这么长一串命令。
不出意外的话,我们可以看见生成出来的四个文件。分别在build文件夹中的两个mainfest.json文件和../static/js中的两个js文件
在webpack.prod.conf.js中配置DllReferencePlugin
在plugins配置中添加:
1 2 3 4
| new webpack.DllReferencePlugin({ context: __dirname, manifest: merge(require('./echarts-manifest.json'),require('./xxxx-manifest.json')) })
|
这里注意context上下文必须和dll.conf.js中的context上下文一致,manifest则配置刚刚生成出来的那两个json文件,因为是两个,所以这里merge一下。
index.html中引入dll.js文件
生成并配置完毕之后,在index.html中引入生成出来的那两个js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html>
<head> <meta charset="utf-8"> <title>管理后台</title> </head>
<body> <div id="app"> </div> <!-- 引入第三方库 --> <script src="<%= webpackConfig.output.publicPath %>static/js/echarts.dll.js"></script> <script src="<%= webpackConfig.output.publicPath %>static/js/xxxx.dll.js"></script> </body>
</html>
|
再次打包查看效果
再次执行 npm run build 命令,我们可以看到之前vendor.js中的echarts和xxxx已经被分离出来了,vendor.js也没有那么大了。
思考
这个方法不能减小总的打包大小,网络请求会多几个,但比加载一个特别大的js还是快了一点。后续首屏优化的话,还是需要懒加载等技术,下次在研究了。