Запустите накопительный плагин, когда все на сборке будет завершено - PullRequest
0 голосов
/ 27 июня 2018

Я использую функцию experimentalCodeSplitting: true в накопительном пакете 0.61.2, чтобы получить хорошее разделение кода. Поскольку мой проект также состоит из ресурсов, я создал плагин, который соответственно копирует и минимизирует файлы ресурсов. Проблема в том, что используемые мной хуки вызываются для каждого создаваемого чанка. Поэтому активы копируются и минимизируются несколько раз. Единственный обходной путь, который я нашел, состоит в том, чтобы создать какой-либо флаг, который установлен в true после того, как все сделано правильно. Есть ли функциональность, чтобы вызывать накопительный хук после того, как все (или до всего) закончено, а не на каждом chunk? Теперь мой плагин выглядит примерно так: (я удалил некоторые части и упростил для удобства чтения):

export default function copy(userOptions = {}) {
    const name = 'copyAndMinify';
    const files = userOptions.files || [];
    let isCopyDone = false;

    return {
        name: name,
        // also tried onwrite, ongenerate, buildEnd and generateBundle
        buildStart() { 
            if (isCopyDone) {
                return;
            }
            for (let key in files) {
                const src = key;
                const dest = files[key];

                try {
                    minifyFile(src, dest);
                } catch (err) {
                    fatal(name, src, dest, err);
                }
            }
            isCopyDone = true;
        }
    };
};

Может быть, есть лучший способ сделать такие вещи, потому что в этой реализации мне всегда нужно полностью перезапускать накопительный пакет, чтобы запустить мой плагин

1 Ответ

0 голосов
/ 07 июля 2018

В сводной вики перечислены все доступные зацепки для плагинов.

generateBundle похоже на то, что вы хотите.

generateBundle (ранее onwrite и ongenerate) - хук функции ( outputOptions, bundle, isWrite ) => void вызывается при выполнении bundle.generate() или bundle.write(); Вы также можете вернуть обещание. bundle предоставляет полный список файлов, которые пишутся или генерируются вместе с их деталями.

...