写一个将输出压缩为 zip 包的插件。
// ZipPlugin.js
const JSZip = require('jszip');
const path = require('path');
const RawSource = require('webpack-sources').RawSource;
const zip = new JSZip();
module.exports = class ZipPlugin {
constructor(options) {
this.options = options;
}
apply(compiler) {
compiler.hooks.emit.tapAsync('ZipPlugin', (compilation, cb) => {
const folder = zip.folder(this.options.filename);
for (let filename in compilation.assets) {
// console.log('found', filename);
const source = compilation.assets[filename].source();
folder.file(filename, source);
}
zip.generateAsync({
type: 'nodebuffer'
}).then((content) => {
const outputPath = path.join(
'.',
this.options.filename + '.zip'
);
console.log('output', outputPath);
compilation.assets[outputPath] = new RawSource(content);
cb();
});
});
}
}