前言
随着项目的增大,越来越多的插件引入项目,使得项目的构建时间越来越长,而这很影响开发的效率。因此有没有一种方法能够优化构建的内容,提前构建好不怎么改动的插件依赖,而仅仅构建我们所写的业务代码呢?webpack 早已为我们考虑到了这个问题。
DllPlugin
简介
DllPlugin 的主要思想在于将项目内的一些不经常更改的依赖(比如 lodash)提前打包,使得项目构建时忽略这些打包文件,从而减少构建时间,提升构建速度。
参数与使用
1 | new webpack.DllPlugin(options); |
其中 options 含有如下参数:
- context (optional): manifest 文件中请求的上下文(context)(默认值为 webpack 的上下文(context))
- name: 暴露出的 DLL 的函数名 (TemplatePaths: [hash] & [name] )
- path: manifest json 文件的绝对路径 (输出文件)
DllReferencePlugin
简介
简而言之,DllReferencePlugin 就是将 DllPlugin 打包的文件获取,在主 webpack 文件配置后,会让其在构建包时忽略掉 DllPlugin 内配置打包的文件,其依赖 DllPlugin 打包出的 manifest 文件。
参数与使用
1 | new webpack.DllReferencePlugin(options); |
其中 options 含有如下参数:
- context: (绝对路径) manifest (或者是内容属性)中请求的上下文
- manifest: 包含 content 和 name 的对象,或者在编译时(compilation)的一个用于加载的 JSON manifest 绝对路径
- content (optional): 请求到模块 id 的映射 (默认值为 manifest.content)
- name (optional): dll 暴露的地方的名称 (默认值为 manifest.name) (可参考 externals)
- scope (optional): dll 中内容的前缀
- sourceType (optional): dll 是如何暴露的 (libraryTarget)
注:与
output.library
保持name
的一致性。
AddAssetHtmlPlugin
简介
将 dll 拆分的两个 plugin 配置好后,每次构建项目,推送远端之前都需要将我们的 dll 文件的引用动态添加到生成的 html 文件内,此插件就是实现该手动插入的过程
参数与使用
1 | const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin'); |
我们所关注的 options 配置:
- filepath: 文件所在的地址,此处配置 dll 构建出的 .js 文件
- outputPath: 在构建时,引用的文件最终打包至的位置
- publicPath:
script
脚本引用该文件时的绝对位置
注:此插件依赖
html-webpack-plugin
,由于预构建项目内并不需要生成中间 html 文件,因此我们可以不用像示例那样配置 HtmlWebpackPlugin 来生成 .html 文件
配置示例
使用方法
初配置好或者依赖的内容有变动(比如:版本升级)使用此命令更新预打包的依赖,否则即使升级了包,最终打包后也不会有任何变化。
1 | yarn dll |
dllPlugins 部分配置
创建一个 webpack.dll.config.js 文件
1 | const path = require('path'); |
主 webpack 打包文件配置
此处以 vue-cli3 来说明
1 | const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin'); |
package.json 配置
1 | "scripts": { |