UNPKG

chameleon-tool

Version:

chameleon 脚手架工具

62 lines (56 loc) 2.26 kB
const fse = require('fs-extra') const path = require('path') const dependencies = require('./dependencies'); class ExportPlugin { constructor(opts) { this.exportType = opts.exportType; this.mode = opts.mode; this.dependency = {}; } apply(compiler) { const exportType = this.exportType; if (this.mode === 'production') { if (compiler.hooks) { compiler.hooks.afterEmit.tapAsync('export-plugin', emitCommonFile); } else { compiler.plugin('after-emit', emitCommonFile); } } else if (this.mode === 'develop') { if (compiler.hooks) { compiler.hooks.shouldEmit.tap('export-plugin', shouldEmit); } else { compiler.plugin('should-emit', shouldEmit); } } function emitCommonFile(compilation, cb) { let { options } = compilation; if (exportType === 'web') { fse.copySync(path.resolve(__dirname, '../web_global.css'), path.resolve(options.output.path, "common/web_global.css")); fse.copySync(path.resolve(__dirname, '../web_global.js'), path.resolve(options.output.path, "common/web_global.js")); } cb && cb(); } function shouldEmit(compilation) { let { assets, options } = compilation; for (let key in assets) { if (assets.hasOwnProperty(key)) { if (/\?__export$/.test(key)) { assets[key.replace(/\?__export$/, '')] = assets[key]; } delete assets[key]; } } if (exportType === 'web') { fse.copySync(path.resolve(__dirname, '../web_global.css'), path.resolve(options.output.path, "common/web_global.css")); fse.copySync(path.resolve(__dirname, '../web_global.js'), path.resolve(options.output.path, "common/web_global.js")); fse.copySync(path.resolve(__dirname, './webpack.web.config.js'), path.resolve(options.output.path, "build/webpack.cml.config.js")); } if (exportType === 'weex') { fse.copySync(path.resolve(__dirname, './webpack.weex.config.js'), path.resolve(options.output.path, "build/webpack.cml.config.js")); } fse.writeFileSync(`${options.output.path}/dependencies.json`, dependencies.getDependencies()) return true; } } } module.exports = ExportPlugin;