type
status
date
slug
summary
tags
category
icon
password
entry
entry指定webpack开始创建依赖图的起点。在多个入口起点的应用程序中,每个入口起点都会创建一个依赖图。
output
output告诉webpack在哪里输出它所创建的bundles,以及如何命名这些文件。
loader
loader让webpack能够处理那些非JavaScript文件(webpack自身只能处理JavaScript)。loader可以将所有类型的文件转换为webpack能够处理的有效模块。
常用的Webpack Loader
- css-loader:让Webpack能够加载并解析CSS文件。
- style-loader:将CSS转换为可在DOM中使用的样式。
- less-loader和sass-loader:让Webpack能够加载并解析Less和Sass文件。
- postcss-loader:
'postcss-preset-env'
用来配置浏览器前缀。
- babel-loader:将ES6+代码转换为ES5代码,以便在不支持ES6+的浏览器中运行。一般会用一些babel预设,如preset-react,ts等
- vue-loader:用来编译
.vue
文件
webpack5资源模块
pulgin
plugin可以用于执行范围更广的任务。包括打包优化、资源管理和注入环境变量等。
HtmlWebpackPlugin
该插件会自动生成一个HTML文件,并将bundle文件自动注入到HTML文件中。可以自定义生成的HTML文件的模板和内容。
MiniCssExtractPlugin
该插件可以将CSS文件从bundle中提取出来,并单独生成一个CSS文件。这样可以避免将CSS打包进JS文件中,降低JS文件的大小。
CleanWebpackPlugin
该插件可以在每次构建之前清除上一次构建生成的文件。这样可以确保每次构建都是从零开始的,避免旧文件对构建结果产生影响。生产环境中使用
DefinePlugin
该插件可以在编译时将指定的变量替换成对应的值。比如可以将一些环境变量替换成开发环境或生产环境的值,从而实现不同环境的构建。
UglifyJsPlugin
该插件可以压缩JS代码,减小JS文件的体积。可以配置一些选项来控制压缩程度和效果。
CopyWebpackPlugin
该插件可以将指定的文件或目录复制到构建目录中。比如可以将静态资源(图片、字体等)复制到构建目录中,以便在页面中使用。生产环境中使用
mode
通过选择
development
, production
或 none
之中的一个,来设置 mode
参数,可以启用 webpack 内置在相应环境下的优化。其默认值为 production
。devtool
devtool用于控制是否生成以及如何生成source map。
常用的选项有:
eval
:使用eval包裹模块代码,生成Data URL形式的source map,适用于开发环境。速度快,但不利于调试。
cheap-eval-source-map
:使用eval包裹模块代码,在每行末尾添加//# sourceURL,适用于开发环境。速度快,且能够正确的映射到源码。
cheap-module-eval-source-map
:与cheap-eval-source-map
类似,但能够正确的映射到loader中的源码。
eval-source-map
:使用eval包裹模块代码,生成source map文件,适用于开发环境。能够正确的映射到源码,但速度较慢。
cheap-source-map
:不包含列信息,适用于生产环境。
cheap-module-source-map
:与cheap-source-map
类似,但能够正确的映射到loader中的源码。
source-map
:最完整的source map,包含列信息,适用于生产环境。速度较慢,但是能够提供最完整的调试信息。
使用source map可以在浏览器中直接调试打包后的代码,而不需要去查看源代码。在开发环境中,建议使用速度快但映射不完整的source map,以提高开发效率。在生产环境中,建议使用速度慢但映射完整的source map,以便在出现问题时能够快速定位问题。
devServer
webpack-dev-server提供了一个简单的web服务器,并且能够实时重新加载。常用于开发环境。
- contentBase:如果在webpack依赖中找不到文件,会到这个配置的文件夹中找。用来在开发环境替换 CopyWebpackPlugin,因为在开发环境没有必要进行拷贝。build的时候在拷贝就可以了。一般设置为
./public
- hmr(hot module replacement):对模块更新的时候不会对浏览器进行刷新,提高开发效率。 原理是通过socket 长连接进行通信。
- host:打开域名
- port:打开端口
- open:默认打开浏览器
- proxy:解决跨域问题
resolve
帮助更好的解析目录
环境分离
webpack-merge
- 作者:yingwinwin
- 链接:https://yingwinwin.top/article/420e3a05-b010-4455-a87d-6b739db829ea
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章