简单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)})
]
}
···