webpack 中文网
1、什么是 webpack ?
- webpack 是一个打包模块化 JS 的工具,在 webpack 中,一切皆是文件。
- webpack 通过 loader 转换文件
- webpack 通过 plugin 注入钩子
- 并且最终输出由多个模块组成的文件, webpack 专注于构建模块化项目。
2、常见 loader
- file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
- 和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去
- image-loader:加载并且压缩图片文件
- babel-loader:把 ES6 转换成 ES5
- css-loader:加载 CSS,支持模块化、压缩、文件导入等特性 如 import
- style-loader:能够在需要载入的html中创建一个
<style></style>
标签,标签里的内容就是CSS内容。
3、常见 plugin
- define-plugin:定义环境变量
- commons-chunk-plugin:提取公共代码
- uglifyjs-webpack-plugin:通过
UglifyES
压缩ES6
代码
4、loader 和 plugin 不同
- loader是使wenbpack拥有加载和解析非js文件的能力
- plugin 可以扩展webpack的功能,使得webpack更加灵活。可以在构建的过程中通过webpack的api改变输出的结果
5、如何利用webpack来优化前端性能
- 压缩代码。uglifyJsPlugin 压缩js代码, mini-css-extract-plugin 压缩css代码
- 删除死代码(tree shaking),css需要使用Purify-CSS
- 提取公共代码。webpack4移除了CommonsChunkPlugin (提取公共代码),用optimization.splitChunks和optimization.runtimeChunk来代替
6. 什么是bundle,什么是chunk,什么是module?
- bundle:有webpack打包出来的文件
- chunk:webpack在进行模块的依赖分析的时候,代码分割出来的代码块
- module:开发中的单个模块
7.如何提高webpack的构建速度?
- 多入口情况下,使用
CommonsChunkPlugin
来提取公共代码 - 通过
externals
配置来提取常用库 - 利用
DllPlugin
和DllReferencePlugin
预编译资源模块 通过DllPlugin
来对那些我们引用但是绝对不会修改的npm包来进行预编译,再通过DllReferencePlugin
将预编译的模块加载进来。 - 使用
Happypack
实现多线程加速编译 - 使用
webpack-uglify-parallel
来提升uglifyPlugin
的压缩速度。 原理上webpack-uglify-parallel
采用了多核并行压缩来提升压缩速度 - 使用
Tree-shaking
和Scope Hoisting
来剔除多余代码