写一个将输出压缩为 zip 包的插件。
// ZipPlugin.jsconst 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();});});}}
