WebPack 4 SplitChunksPlugin для NodeJS - PullRequest
       1

WebPack 4 SplitChunksPlugin для NodeJS

0 голосов
/ 25 января 2019

Я создаю пакеты для 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 голосов
/ 01 февраля 2019

Вместо того, чтобы выборочно минимизировать выходные блоки, я решил вообще не использовать 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'),
                }
            ]
        }
    ]
},
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...