Open cloudtian opened 5 years ago
DllPlugin和DllReferencePlugin用某种方法实现了拆分bundles,分离出第三方库和自己编写的代码,同时大大提升构建速度。
DllPlugin
DllReferencePlugin
使用场景:项目中使用到的第三方库文件,我们一般都不会频繁的修改,所以可以将其单独打包,只在第一次打包时打包第三方库,之后打包时都只需要打包我们自己编写的代码,可以提升构建速度。
DllPlugin DllPlugin插件会生成一个名为manifest.json的文件,这个文件是用来让DllReferencePlugin映射到相关的依赖上去的。
manifest.json
context
name
[name]
[hash]
path
配置webpack.dll.js:
webpack.dll.js
const webpack = require('webpack'); const path = require('path'); const dllEntry = { vue_all: ['vue', 'vue-router'], babel_runtime: ['@babel/polyfill'] }; module.exports = { mode: 'production', entry: dllEntry, output: { path: path.join(__dirname, 'dist', 'dll'), library: `[name]_library`, filename: `[name].dll.js` }, plugins: [ new webpack.DllPlugin({ name: `[name]_library`, // 该处name需要与output中的library一致 path: path.join(__dirname, 'dist', 'dll', `[name]_manifest.json`) }) ] };
然后运行webpack --config webpack.dll.js就可以生成依赖库的源码和匹配id。 接下来如何引用,就需要在webpack.config.js添加DllReferencePlugin配置了。
webpack --config webpack.dll.js
webpack.config.js
DllReferencePlugin DllReferencePlugin这个插件是在webpack主配置文件中设置的,这个插件通过关联manifest.json把单独打包第三方库生成的dll文件引入进来。
manifest
content
manifest.content
manifest.name
scope
sourceType
配置webpack.config.js:
const webpack = require('webpack'); const path = require('path'); const dllEntry = { vue_all: ['vue', 'vue-router'], babel_runtime: ['@babel/polyfill'] }; module.exports = { //...其他配置省略 plugins: [ ...Object.keys(dllEntry).map(name => { return new webpack.DllReferencePlugin({ manifest: require(path.join(__dirname, 'dist', 'dll', `${name}_manifest.json`)) }); }); ] };
例子: 未使用插件的webpack-demo地址: init地址 webpack-demo引入了lodash第三方库
直接打包生成的index.js文件大小有495KB: index.js 构建bundle花费时间1802ms
index.js
495KB
1802ms
使用插件后webpack-demo地址: 分支地址 使用插件分离lodash后,生成的index.js文件大小只有18.1KB了 index.js 构建manifest.json文件花费时间289ms
18.1KB
289ms
构建bundle花费时间1122ms
1122ms
DllPlugin和DllReferencePlugin
DllPlugin
和DllReferencePlugin
用某种方法实现了拆分bundles,分离出第三方库和自己编写的代码,同时大大提升构建速度。使用场景:项目中使用到的第三方库文件,我们一般都不会频繁的修改,所以可以将其单独打包,只在第一次打包时打包第三方库,之后打包时都只需要打包我们自己编写的代码,可以提升构建速度。
DllPlugin
DllPlugin
插件会生成一个名为manifest.json
的文件,这个文件是用来让DllReferencePlugin
映射到相关的依赖上去的。context
(optional): manifest文件中请求的上下文(默认值为webpack的上下文)name
: 暴露出的dll的函数名([name]
&[hash]
)path
: manifest.json文件的绝对路径(输出文件)配置
webpack.dll.js
:然后运行
webpack --config webpack.dll.js
就可以生成依赖库的源码和匹配id。 接下来如何引用,就需要在webpack.config.js
添加DllReferencePlugin
配置了。DllReferencePlugin
DllReferencePlugin
这个插件是在webpack主配置文件中设置的,这个插件通过关联manifest.json
把单独打包第三方库生成的dll文件引入进来。context
: (绝对路径) manifest中请求的上下文manifest
:manifest.json
文件的绝对路径content
(optional): 请求到模块id的映射(默认为manifest.content
)name
(optional): dll暴露的地方的名称(默认为manifest.name
)scope
(optional): dll中内容的前缀sourceType
(optional): dll是如何暴露的配置
webpack.config.js
:例子: 未使用插件的webpack-demo地址: init地址 webpack-demo引入了lodash第三方库
直接打包生成的
index.js
文件大小有495KB
: index.js构建bundle花费时间
1802ms
使用插件后webpack-demo地址: 分支地址 使用插件分离lodash后,生成的
index.js
文件大小只有18.1KB
了 index.js构建manifest.json文件花费时间
289ms
构建bundle花费时间
1122ms