const Fs = require("fs"); const Path = require("path"); const FsExtra = require("fs-extra"); class ChromeManifest { constructor(options) { this.options = options; } apply(compiler) { compiler.plugin("done", function (compilation, callback) { const {manifest} = this.options; if (manifest) { if (Fs.existsSync(manifest)) { // 生成manifest.json let data = require(manifest); let distPath = compilation.compilation.options.output.path; let outFile = Path.join(distPath, "manifest.json"); Fs.writeFileSync(outFile, JSON.stringify(data, null, 4)); console.log(`生成manifest文件: ${outFile}`); // 复制图片 const manifestDir = Path.dirname(manifest); if (data.icons) { for (let key in data.icons) { let icon = data.icons[key]; let iconPath = Path.join(manifestDir, icon); if (Fs.existsSync(iconPath)) { FsExtra.copySync(iconPath, Path.join(distPath, icon), {overwrite: true}); console.log(`copy res: ${icon}`); } } } } else { console.error(`manifest文件不存在:${manifest}`); } } else { console.log("缺少插件的manifest信息"); } }.bind(this)); } } module.exports = ChromeManifest;