@conecli/cone-cli
Version:
松果编辑器命令行工具
54 lines (49 loc) • 1.68 kB
JavaScript
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()
})
})
}