我有多个共享相同代码的入口点。我需要做的是在 webpack 4 中使用 splitCode
将此代码提取到一个文件中。这在 development
模式下工作正常,但在 生产
模式下不行。
配置文件:
var path = require('path');
const ManifestPlugin = require('webpack-manifest-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const WebpackMd5Hash = require("webpack-md5-hash");
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
mode: "development",
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
}
},
{
test: /\.(sass|scss|css)$/,
use: [
"style-loader",
MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader"
]
}
],
},
output: {
path: path.join(__dirname, 'public'),
filename: 'js/[name]-[chunkhash].js',
chunkFilename: 'js/[name]-[chunkhash].js',
publicPath: '/'
},
externals: {
jquery: "jQuery"
},
optimization: {
runtimeChunk: "single",
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: "vendor",
chunks: "all",
priority: 1
},
utilities: {
test: /\.s?js$/,
minChunks: 2,
name: "utilities",
chunks: "all",
priority: 0
}
}
}
},
context: path.join(__dirname, 'resources/assets'),
entry: {
a: './js/a.js',
b: './js/b.js'
},
plugins: [
new CleanWebpackPlugin(['public/js/*.*', 'public/css/*.*'], {} ),
new MiniCssExtractPlugin({
filename: "css/[name]-[contenthash].css"
}),
new WebpackMd5Hash(),
new ManifestPlugin({
fileName: 'manifest.json'
}),
]
};
在开发模式下,Webpack 创建两个入口点,一个是 runtime.js
、vendor.js
和 utilities.js
,这是可以的。
当我将模式从开发
更改为生产
时,webpack会忽略实用程序
缓存组并将公共(public)代码库附加到两个入口点。
我错过了什么?
Webpack版本:4.28.4 节点版本:8.15
最佳答案
似乎将 enforce
设置为 true
就可以完成这项工作(但我并不完全确定为什么)。
应该是这样的:
utilities: {
test: /\.s?js$/,
minChunks: 2,
name: "utilities",
chunks: "all",
priority: 0,
enforce: true
}
从现在开始,utilities.js
不仅会在开发模式下创建,还会在生产模式下创建。
关于javascript - 为什么 webpack 在生产模式下会忽略 chunk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214050/