webpack之mode篇
在webpack 4.x版本之后提供了mode配置选项,告知webpack在打包的时候使用相应模式的内置优化
作用
- 当指定使用production mode时.默认会启用各种性能优化的功能,包括构建结果优化以及webpack运行性能优化,会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin
- 如果使用development mode的话,则会开启debug工具, 会将 process.env.NODE_ENV 的值设为 development。启用 NamedChunksPlugin 和 NamedModulesPlugin
如何设置mode
- 使用--mode 来设置模块内的process.env.NODE_ENV
// webpack.config.js
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve('dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader','css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
}
// package.json
{
"scripts": {
"build": "webpack --mode=production",
"dev": "webpack --mode=development serve"
},
"devDependencies": {
"html-webpack-plugin": "^5.5.0",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2"
},
"dependencies": {
"css-loader": "^6.6.0",
"style-loader": "^3.3.1"
}
}
- 使用--env 来设置webpack配置文件的函数参数
// package.json
{
"scripts": {
"build": "webpack --env=production",
"dev": "webpack serve --mode=development"
},
"devDependencies": {
"html-webpack-plugin": "^5.5.0",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2"
},
"dependencies": {
"css-loader": "^6.6.0",
"style-loader": "^3.3.1"
}
}
// webpack.config.js
// 此时需要一个函数来接收参数
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = (env) => {
return {
mode: env,
entry: './src/index.js',
output: {
path: path.resolve('dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader','css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
}
}
- 使用DefinePlugin来设置模块内的全局变量
// webpack.config.js
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve('dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader','css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new webpack.DefinePlugin({
'process.env.NODE_ENV':JSON.stringify(process.env.NODE_ENV)
})
]
}
- 使用cross-env来设置模块内的全局变量
// package.json
{
"scripts": {
"build": " cross-env NODE_ENV=development webpack",
"dev": "webpack serve --mode=development"
},
"devDependencies": {
"html-webpack-plugin": "^5.5.0",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2"
},
"dependencies": {
"css-loader": "^6.6.0",
"style-loader": "^3.3.1"
}
}
// webpack.config.js
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: process.env.NODE_ENV,
entry: './src/index.js',
output: {
path: path.resolve('dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader','css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new webpack.DefinePlugin({
'process.env.NODE_ENV':JSON.stringify(process.env.NODE_ENV)
})
]
}