用于NodeJS的WebPack 4 SplitChunksPlugin

时间:2019-01-25 20:12:28

标签: node.js webpack

我正在为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}`;
            },
        },
    },
},

1 个答案:

答案 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'),
                }
            ]
        }
    ]
},
...