我正在为NodeJS 8.x(AWS Lambda)生产捆绑软件,并希望选择性地最小化块(保持业务代码最小化,而第三方库则最小化以节省分发包大小)。
我已经如下配置Webpack了,但是我的主要捆绑包无法正常工作,因为它不能构建为需要其他文件(每个npm依赖项一个文件)。 如何配置WebPack来生成在NodeJS中可能需要彼此的块?
splitChunks: {
chunks: 'all',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: (module) => {
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `npm.${packageName}`;
},
},
},
},
答案 0 :(得分:1)
我选择不完全使用SplitChunksPlugin,而不是有选择地缩小输出块,而是在自定义加载器中进行缩小,作为编译的一部分。
这使您可以准确选择要缩小的输入文件(Webpack称其为资产)和不需要的输入文件。
npm install terser --save-dev
tools / es-minify-loader.js
const Terser = require('terser');
module.exports = function esMinifyLoader(source) {
const output = Terser.minify(source, { compress: true, mangle: true });
return output.code;
};
webpack.config.js
...
module: {
rules: [
{
exclude: [
/dont-minify-this-file\.js/,
/some-library-or-folder-you-dont-want-minified/i,
],
test: [
/\.js$/
],
use: [
{
loader: path.resolve(__dirname, 'tools/es-minify-loader.js'),
}
]
}
]
},
...