简单zip压缩webpack plugin插件
功能很简单,webpack压缩成功后输入一个zip的压缩包
const fs = require('fs')
const archiver = require('archiver')
const path = require('path')
const rm = require('rimraf')
class ZipWebpackPlugin {
constructor (option = {}) {
this.dir = option.dir
}
apply(compiler) {
compiler.hooks.afterEmit.tapAsync('zipWebpackPlug', (compilation, cb) => {
const currentPath = path.resolve(__dirname, this.dir)
console.log( '输入路径:%S',currentPath);
function done (currentPath) {
const outputName = path.basename(currentPath)
const output = fs.createWriteStream(`${currentPath}.zip`)
const archive = archiver('zip')
output.on('close', function () {
console.log('压缩完成')
})
output.on('end', function () {
console.log('压缩完成')
})
archive.on('err', function (err) {
throw err
})
archive.pipe(output)
archive.glob(`${outputName}/**`)
archive.finalize()
}
if (fs.existsSync(`${this.dir}.zip`)) {
console.log('删除zip包')
rm(`${this.dir}.zip`, err => {
if (err) throw err
done(currentPath)
cb()
})
} else {
done(currentPath)
cb()
}
})
}
}
module.exports = ZipWebpackPlugin
在webpack配置中使用
···
module.exports = {
plugin: [
new ZipPlugin({dir: path.join(__dirname, outputDir)})
]
}
···