面试题答案
一键面试1. HappyPack和DllPlugin提升打包速度的协作原理
- HappyPack:它将任务分解给多个子进程去并发执行。Webpack在打包时,通常对文件的loader处理是单线程的,例如babel-loader转译代码会耗费较多时间。HappyPack利用Node.js的多进程特性,将这些耗时任务分配到多个进程并行处理,从而加速打包。
- DllPlugin:它把一些不常变动的第三方库提前打包成dll文件。在正常打包时,Webpack不再重复处理这些库,而是直接引用已生成的dll文件,大大减少了打包的模块数量和处理时间。
- 协作方式:DllPlugin提前分离并打包稳定的第三方库,减少了HappyPack并行处理的任务总量。HappyPack则能更高效地处理剩下的业务代码相关的loader任务,因为任务变少且可并行执行,两者相互配合显著提升打包速度。
2. 配置要点
- DllPlugin配置要点:
- webpack.dll.js配置:
- 使用
DllPlugin
插件,定义context
为项目根目录,name
指定dll库名(例如[name]_[hash]
),path
指定生成的manifest文件路径。 - 在
entry
中指定需要提取的第三方库,如['react', 'react - dom']
。
- 使用
- webpack.config.js配置:
- 使用
DllReferencePlugin
插件,通过manifest
属性引入webpack.dll.js
生成的manifest文件,告知Webpack如何引用dll文件。
- 使用
- webpack.dll.js配置:
- HappyPack配置要点:
- 安装HappyPack:确保项目中安装了
happy - pack
。 - webpack.config.js配置:
- 创建HappyPack实例,指定
id
(如babel
),loaders
为原本的loader配置(如['babel - loader']
),threads
指定进程数(根据机器性能合理设置,一般为CPU核心数)。 - 在
module.rules
中,将原本应用于特定文件类型(如.js
)的loader替换为HappyPackLoader
,并通过options.id
指定对应的HappyPack实例id。
- 创建HappyPack实例,指定
- 安装HappyPack:确保项目中安装了