简介:html
DLLPlugin
和 DLLReferencePlugin
用某种方法实现了拆分 bundles,同时还大大提高了构建的速度vue
详情请看:https://www.webpackjs.com/plugins/dll-plugin/webpack
它的做用就是把项目中的依赖和代码分开来打包,在依赖没有变动的状况下项目的编译打包不须要再重复的编译打包依赖的部分,从而加快了打包的速度,同时也能够解决同一个依赖被重复屡次打包的状况致使的项目臃肿的问题web
建议只抽离项目公用的依赖,以避免生成的vendor.dll.js文件过大,影响首页的加载速度vue-router
具体配置操做以下:vuex
第一步:打包依赖npm
先安装两个插件npm i assets-webpack-plugin clean-webpack-plugin --save -devjson
而后在build目录下添加webpack.dll.conf.js配置文件,具体配置内容以下:数组
var path = require('path') var webpack = require('webpack') var AssetsPlugin = require('assets-webpack-plugin') // 用于给vendor.dll.js名称添加动态哈希数字,解决更新vendor.dll.js时的缓存问题 var CleanWebpackPlugin = require('clean-webpack-plugin') // 用于更新vendor.dll.js前清除旧的vendor.dll.js module.exports = { entry: { vendor: ['vue','vuex','vue-router',...] // 须要打包的依赖名称数组 }, output: { path: path.join(__dirname, '../static/js'), // 打包后文件的输出位置,建议放在static目录下,运行npm run build打包的时候能够被直接复制到dist目录中,免去了手动复制的麻烦 filename: '[name]_[hash:6].dll.js', // 打包后文件的名称 library: '[name]_[hash_6]_library' // vendro.dll.js中暴露的全局变量名,主要是给DllPlugin中的name用,需与DllPlugin中的name一致 }, plugins: [ new CleanWebpackPlugin(['static/js'], { // 清除文件路径 root: path.resolve(__dirname, '../') // 清除文件根路径 }), new AssetsPlugin({ filename: 'bundle-conf.json', // 生成文件名称 path: __dirname // 生成文件路径 }), new webpack.DllPlugin({ path: path.join(__dirname, '.', '[name]-manifest.json'), // 生成vendor.dll.js文件的路径 name: '[name]_[hash:6]_library', // 同output中的library }), new webpack.optimize.UglifyJsPlugin({ // 压缩打包的文件 compress: { warning: false } }) ] }
最后在package,json的“script”属性中添加:缓存
“build:dll”: "webpack --config build/webpack.dll.conf.js"
运行npm run build:dll
能够看到static/js下面生成了依赖文件vendor.dll.js
第二步:引用依赖
1.在webpack配置中引入须要的预编译的依赖:
在build/webpack.base,conf.js的“plugins”属性中添加插件:
new webpack.DllReferencePlugin({
manifest: require('./vendor-manifest.json')
})
2.在index.html中引入依赖文件
在build/webpack.prod.conf.js和build/webpack.dev.conf.js中引入bundle-conf.json文件,用于获取生成的vendor.dll.js文件路径
var CommonsPkg = require('./bundle-conf.json')
而后给HtmlWebpackPlugin插件添加bundleName属性,用于为首页提供依赖的路径变量
/webpack.dev.conf.js:bundleName: `${config.dev.assetsPublicPath}static/js/${CommonsPkg.vendor.js}`
webpack.prod.conf.js: bundleName: `${config.build.assetsPublicPath}static/js/${CommonsPkg.vendor.js}`
最后在index.html中引入依赖文件:
<script src="<%= htmlWebpackPlugin.options.bundleName%>"></script>
到这里配置就所有完成了,运行npm run build打包就能够打包了