vue 开发过程中,保存一次就会编译一次,如果能够减少编译的时间,哪怕是一丁点,也能节省不少时间。开发过程中个人编写的源文件才会频繁变动,而一些库文件我们一般是不会去改动的。如果能把这些库文件提取出来,就能减少打包体积,加快编译速度。本文主要讲述在 vue-cli3 中利用 DllPlugin 来进行预编译。
1.安装相关插件
npm install webpack-cli --save-d
2.在项目根目录下新建 webpack.dll.conf.js,输入以下内容。
const path = require("path")
const webpack = require("webpack")
// dll文件存放的目录
const dllPath = "public/vendor"
module.exports = {
entry: {
// 需要提取的库文件
vendor: ["vue", "vue-router", "vuex", "axios", "iView"]
},
output: {
path: path.join(__dirname, dllPath),
filename: "[name].dll.js",
// vendor.dll.js中暴露出的全局变量名
// 保持与 webpack.DllPlugin 中名称一致
library: "[name]_[hash]"
},
plugins: [
// 设置环境变量
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: "production"
}
}),
// manifest.json 描述动态链接库包含了哪些内容
new webpack.DllPlugin({
path: path.join(__dirname, dllPath, "[name]-manifest.json"),
// 保持与 output.library 中名称一致
name: "[name]_[hash]",
context: process.cwd()
})
]
}
3.生成dll
在package.json文件中输入以下内容
"scripts": {
···
"dll": "webpack -p --progress --config ./webpack.dll.conf.js"
}
控制台运行
npm run dll
4.忽略已编译文件
为了节约编译的时间,这时间我们需要告诉 webpack 公共库文件已经编译好了,减少 webpack 对公共库的编译时间。在项目根目录下找到 vue.config.js ( 没有则新建 ),配置如下:
const webpack = require('webpack')
module.exports = {
...
configureWebpack: {
plugins: [
new webpack.DllReferencePlugin({
context: process.cwd(),
manifest: require('./public/vendor/vendor-manifest.json')
})
]
}
}
5.index.html中加载已生成的dll.js
经过上面的配置,公共库提取出来了,编译速度快了,但如果不引用生成的 dll 文件,网页是不能正常工作的。
打开 public/index.html,插入 script 标签。
<script src="./vendor/vendor.dll.js"></script>
完。