webpck4新特性
—mode=development|production
development模式下,将侧重于功能调试和优化开发体验
production模式下,将侧重于模块体积优化和线上部署
注意: webpack4开始官方移除了commonchunk插件,改用了optimization属性进行更加灵活的配置,这也应该是从V3升级到V4的代码修改过程中最为复杂的一部分,下面的代码即是optimize.splitChunks 中的一些配置参考
预备/默认配置
mkdir <fileName>
$file touch index.html index.js
yarn init -y // 初始化package.json
npx webpack --version // 4.43.0
编辑index.html, 引入index.js
<body>
<script src="./index.js"></script>
</body>
index.js
import { names } from './name'
console.log("hello", names.join(','))
name.js
const names = ['Jack', 'Lucy'];
export names
默认打包
npm i webpack webpack-cli --dev
npx webpack
ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/zc/Workspace/useWebpack'
解决: 移动js文件到src/
默认会自动从src/index.js 文件开始打包, 打包存放到dist/main.js
"build": "webpack"
npm run build // 代替npx webpack
配置项
babel解析es6
npm i @babel/core @babel/preset-env babel-loader
// 8.x.x 7.x.x 1.x.x
webpack.config.js
module.exports = {
mode: "development",
module: {
rules: [
{
test: /\.js$/,
exlude: /node_modules/,
use: {
loader: 'bable-loder'
}
}
]
},
devtool: "source-map",
}
.babelrc
{
"presets": ["@babel/preset-env"]
}
修改为观察状态
"build": "webpack --watch"
webpack-dev-server
npm i webpack-dev-server --dev
devServer: {
contentBase: './dist'
}
添加指令
"start": 'webpack serve'
添加入口
const path = require('path')
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
设置ENV
"build": "NODE_ENV=production webpack --watch",
"build:dev": "webpack --watch"
读取
const mode = process.env.NODE_ENV === "production" ? "production" : "development";
mode: mode
配置启动后自动打开编辑器
// webpack 命令
// 已验证,打开http://0.0.0.0:9000/
$ webpack-dev-server --open
// webpack 配置文件
// 已验证, 可打开
devServer: {
open: true
}
// vue-cli2.0构建项目
dev: {
autoOpenBrowser: true,
}// webpack 命令
// 已验证,打开http://0.0.0.0:9000/
$ webpack-dev-server --open
// webpack 配置文件
// 已验证, 可打开
devServer: {
open: true
}
// vue-cli2.0构建项目
dev: {
autoOpenBrowser: true,
}
build过滤console, terser-webpack-plugin
⚠️ 当前最新@^5, 与webapck4匹配需要@^2
npm install terser-webpack-plugin@^2 --save-dev
const TerserPlugin = require('terser-webpack-plugin')
optimization: {
// minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true
}
}
})
],
}
webpack之前