UNPKG

@conecli/cone-cli

Version:

松果编辑器命令行工具

54 lines (49 loc) 1.68 kB
const glob = require('glob') const async = require('async') const path = require('path') const template = require('art-template') const logger = require("./logger") const {copySync, readFile, writeFile} = require("./util") /** * 根据给定的源目录和目标目录拷贝渲染模板代码 * 此处的dest目录需要注意,可能涉及到其他不需要渲染的文件,要做排除处理 * @param {String} src * @param {String} dest * @param {String} data * @param ignore 忽略的文件规则 */ module.exports = function generate(src, dest, data, ignore=['node_modules/**']) { return new Promise((resolve, reject)=>{ copySync(src, dest) // 遍历目录下所有文件 const pattern = path.resolve(dest, "**/*") ignore = ignore.map((item, index)=>{ return path.resolve(dest, item) }) const allfiles = glob.sync(pattern, {ignore}) async.each(allfiles, (file, next) => { const str = readFile(file) if(str){ //跳过不需要替换变量的文件 if (!/{{([^{}]+)}}/g.test(str)) { return next() } try{ const txt = template.render(str, data) writeFile(file, txt) next() } catch(err){ let message = `[${file}] ${err.message}` logger.warning("render error:", message) next(err) } } else{ next() } }, ()=>{ resolve() }) }) }