UNPKG

chameleon-tool

Version:

chameleon 脚手架工具

57 lines (45 loc) 1.68 kB
const fs = require('fs'); const fse = require('fs-extra'); const path = require('path'); const glob = require('glob'); class CopyNpmPLugin { constructor(options) { this.cmlType = options.cmlType; this.root = options.root; } apply(compiler) { let self = this; if (compiler.hooks) { compiler.hooks.afterEmit.tap('CopyNpmPLugin', copyNpm); } else { compiler.plugin('after-emit', copyNpm); } function copyNpm(compilation, callback) { let copyNpm = cml.config.get().copyNpm && cml.config.get().copyNpm[self.cmlType]; if (copyNpm && copyNpm.length > 0) { copyNpm.forEach(function(npmName) { let packageRoot = path.join(cml.projectRoot, 'node_modules', npmName); let packageJson = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), {encoding: 'utf-8'})); let cmlConfig = packageJson.cml && packageJson.cml[self.cmlType]; let copyArray = []; if (cmlConfig.pages && cmlConfig.pages.length > 0) { copyArray = copyArray.concat(cmlConfig.pages) } if (cmlConfig.components && cmlConfig.components.length > 0) { copyArray = copyArray.concat(cmlConfig.components) } copyArray.forEach(copyItem => { let globPath = path.join(packageRoot, `${copyItem}.*`); let copyFiles = glob.sync(globPath); copyFiles.forEach(file => { let dest = path.join(self.root, copyItem + path.extname(file)); fse.copySync(file, dest) }) }) }) } return callback() } } } module.exports = CopyNpmPLugin;