UNPKG

webpack-plugin-pack-war

Version:

a plugin based on archiver to pack web project's output files to .war or .zip file.

75 lines (69 loc) 2.41 kB
const archiver = require("archiver"); const fs = require("fs"); const path = require("path"); let buildType = "zip"; function PackOutputFilesToWarPlugin(options) { console.log("options", options); if (options && options.buildType && options.buildType != "") { buildType = options.buildType; } } PackOutputFilesToWarPlugin.prototype.apply = function (compiler) { // 生成资源到 output 目录之后执行 compiler.plugin("afterEmit", function (compilation) { const dir = compilation.compiler.outputPath; const buildFolderName = dir.substring(dir.lastIndexOf("\\") + 1); const buildPathParent = dir.substring(0, dir.lastIndexOf("\\")); const pkgDir = buildPathParent + `/${buildFolderName}-pkg`; const fileName = dir.substring(dir.lastIndexOf("\\") + 1); const zipFilePath = pkgDir + "/" + fileName + ".zip"; //写war包需要的文件 if (buildType == "war") { const tempFileDir = path.join(__dirname, "template-files"); writeToDir(tempFileDir, dir); } console.log(dir, zipFilePath); if (!fs.existsSync(pkgDir)) { fs.mkdirSync(pkgDir, { recursive: true, }); } //先打zip const output = fs.createWriteStream(zipFilePath); const archive = archiver("zip", { zlib: { level: 9 }, }); output.on("close", function () { let outFilePath = zipFilePath; if (buildType == "war") { const warFilePath = pkgDir + "/" + fileName + ".war"; outFilePath = warFilePath; fs.renameSync(zipFilePath, warFilePath); } console.log("\x1b[32m", "打包完成", outFilePath, "\x1b[37m"); }); archive.on("error", function (err) { throw err; }); archive.on("finish", function () {}); archive.pipe(output); archive.directory(dir, false); //完成归档 archive.finalize(); }); }; function writeToDir(sourceDir, targetDir) { const files = fs.readdirSync(sourceDir); files.forEach((item, index) => { const fpath = path.join(sourceDir, item); const tpath = path.join(targetDir, item); const stat = fs.statSync(fpath); if (stat.isDirectory()) { fs.mkdirSync(tpath); writeToDir(fpath, tpath); } else if (stat.isFile()) { fs.copyFileSync(fpath, tpath); } }); } module.exports = PackOutputFilesToWarPlugin;