Webpack4配置指南
文章目录
webpack是目前web前端最流行的项目管理工具,它的概念繁多配置繁琐但功能及其强大可以应对各种项目管理需求。
webpack4是webpack一个大的升级,自带一些默认设置项一些之前可以使用的插件也不在兼容。本文记录webpack4下主要会用到的模块和插件。
webpack核心功能是前端Javascript代码的模块管理,而对于css,png等其它类型的文件处理,是通过loader调用第三方提供的处理库。webpack4核心模块有:Entry
,Output
,Module
,Optimization
,Plugins
,Mode
。
1 | $ yarn add -D webpack webpack-cli |
Entry
entry
用于配置项目入口文件。它支持的类型有:string | [string] | object { <key>: string | [string] } | (function: () => string | [string] | object { <key>: string | [string] })
1 | // object模式 |
如果传入的是 string
,[string]
则输出文件名chunk是main
Output
output
用于配置项目输出信息。你可以设定:输出文件目录,输出文件名,外部资源链接等。
output.filename
设定输出文件名。可以使用webpack提供的模板:
模板 | 描述 |
---|---|
[hash] | 模块标识的hash值 |
[chunkhash] | 模块内容的hash值 |
[name] | 模块名称(根据entry输入类型) |
[id] | 模块标识 |
[query] | 模块的 query,例如,文件名 ? 后面的字符串 |
[hash]和[chunkhash]可以指定值长度,例如:[hash:16]。默认长度为20。
1 | module.exports = { |
output.chunkFilename
设置为入口文件的输出名,它的配置模板和output.filename
一样。默认值是[id].js。
output.path
指定项目输出路径,必须是绝对路径。
1 | module.exports = { |
output.publicPath
为项目中所有资源(js,css,img等资源)指定一个基础路径。添加publicPath
后静态资源打包后的路径是:
1 | 静态资源最终访问路径 = output.publicPath + 资源loader或插件等配置路径 |
例如:
1 | output.publicPath = '/dist/' |
一般情况下publicPath应该以’/‘结尾,而其他loader或插件的配置不要以’/‘开头
Module
Module
用于指定处理不同类型文件的方式。例如,项目中的css,fonts,png等处理方式需要在该模块指定处理方式。
1 | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
针对不同的类型文件webpack生态都有针对的处理加载器可以方便和项目相融合。
加载器的配置是webpack部分最难懂。好在现在主流的前端技术框架 Vue,React都提供了一键式开发环境配置工具vue-cli
和create-react-app
Mode
webpack4提供对项目优化的默认配置,这些配置可以在optimization
可以再定制。而optimization
中有些配置项的值 是根据mode
值而定的。
mode
是webpack4最新引入的模块,用于告诉webpage打包用以的环境(开发环境或生产环境)。
mode
可以有三个可选值:production
,development
,none
。
1 | module.exports = { |
操作 | 描述 |
---|---|
development |
将process.env.NODE_ENV 在DefinePlugin 的值设置为development 。并启用NamedChunksPlugin , NamedModulesPlugin |
production |
将process.env.NODE_ENV 在DefinePlugin 的值设置为production 。并启用 FlagDependencyUsagePlugin , FlagIncludedChunksPlugin , ModuleConcatenationPlugin , NoEmitOnErrorsPlugin , OccurrenceOrderPlugin , SideEffectsFlagPlugin and UglifyJsPlugin . |
none |
关闭optimization 中的所有优化。 |
Optimization
webpack4 提供了根据 mode
值针对项目优化的默认配置。而这些配置是在optimization
设定的,根据项目可以自定义这些配置。
optimization.minimize
当mode
值为production
时,并且optimization.minimize
为true
。webpack会调用UglifyjsWebpackPlugin
压缩文件。
你可以在optimization.minimizer
自定义UglifyjsWebpackPlugin
。
1 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); |
optimization.splitChunks
webpack4中切分公用模块的配置项。默认配置如下:
1 | module.exports = { |
Plugins
plugins
模块通过第三方插件实现对项目的定制话配置。
1 | const webpack = require('webpack'); |
DevServer
通过webpack-dev-server我们可以在webpack中使用devServer
模块。该模块可以启动一个node服务器方便我们在开发时及时预览页面效果。
通过webpack-dev-server --mode development --inline --hot --color
命令启用devServer
。
1 | module.exports = { |
作者: Fynn
链接: https://fynn90.github.io/2018/08/02/webpack4%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可