常用配置项
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const cssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin");
{
mode: 'development',
devtool: 'source-map',
entry: {
index: path.resolve(__dirname, './src/index.tsx')
},
watch:true,
output: {
path: path.resolve(__dirname, './dist'),
filename: 'js/[name].[contenthash:8].js',
chunkFilename: 'js/[name].chunk.js',
assetModuleFilename: 'assets/[name].[contenthash][ext]',
clean: true
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx'],
alias: {
'@': path.resolve(__dirname, './src'),
},
},
module: {
rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
esModule: false,
modules: {
mode: "local",
localIdentName: "[local]--[hash:base64:5]",
},
},
},
"postcss-loader",
]
},
{
test: /\.s[ac]ss$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
},
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: [
[
"@babel/preset-env",
{
targets: ["last 1 versions", "> 1%"],
useBuiltIns: "usage",
corejs: 3,
},
],
],
},
},
},
]
},
plugins: [
new webpack.ProvidePlugin({
_: 'lodash',
react: 'react'
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module) {
return module.context && module.context.includes('node_modules');
}
}),
new HtmlWebpackPlugin({
template: 'index.html',
filename: "app.html",
inject: "body",
}),
new MiniCssExtractPlugin({
filename: 'styles/[contenthash:8].css'
})
]
stats: 'errors-warnings',
devServer: {
stats: 'errors-warnings',
hot: true,
port: 3000,
historyApiFallback: true,
proxy: {
'/api': {
target: 'http://localhost:8888',
changeOrigin: true,
pathRewrite: {
'^/api': '',
},
},
},
client: {
overlay: false,
},
optimization: {
usedExports: true,
},
},
library: {
name: "mylib",
type: "umd",
},
globalObject: "globalThis",
}
一般打包优化配置
{
bail: true,
externals: {
react: 'React',
'react-dom': 'ReactDOM',
},
optimization:{
splitChunks: {
cacheGroups: {
vendor: {
name: 'vendors',
test: /[\\/]node_modules[\\/]/,
chunks: 'all',
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true,
},
},
},
},
minimizer: [new cssMinimizerWebpackPlugin()],
}
缓存
cache: {
type: 'memory',
}
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename],
},
cacheDirectory: path.resolve(__dirname, '.cache'),
}
1、开发模式用内存缓存,电脑内存不够的误用;
2、生产模式用磁盘缓存,持久化缓存,进程重启后仍然可以使用缓存
postcss.config.js
module.exports = {
plugins: [
require("autoprefixer"),
require("postcss-nested"),
],
};
多页面配置
entry: {
main: {
import: ["./src/app.js", "./src/app2.js"],
dependOn: "lodash",
filename: "channel1/[name].[contenthash:8].js",
},
main2: {
import: "./src/app3.js",
dependOn: "lodash",
filename: "channel2/[name].[contenthash:8].js",
},
lodash: {
import: "lodash",
filename: "common/[name].js",
},
},
output: {
filename: "[name].[contenthash:8].js",
clean: true,
},
plugins: [
new HtmlWebpackPlugin({
title: "多页面应用test",
template: "./index.html",
inject: "body",
filename: "channel1/index.html",
chunks: ["main", "lodash"],
publicPath: "http://www.a.com/",
}),
new HtmlWebpackPlugin({
template: "./index2.html",
inject: "body",
filename: "channel2/index2.html",
chunks: ["main2", "lodash"],
publicPath: "http://www.b.com/",
}),
],