jiuye-cli
Version:
A simple CLI for scaffolding Jiuye projects.
42 lines (36 loc) • 1.34 kB
JavaScript
const match = require('minimatch') // 字符匹配工具
const evaluate = require('./eval') // 返回某作用下表达式的值
/**
* files 模板内的所有文件
* filters meta.js或者meta.json的filters字段
* data metalsmith.metadata()
* done 交于下一个metalsmith插件处理
*/
module.exports = (files, filters, data, done) => {
// console.log('files:', files)
// console.log('filters:', filters)
// console.log('data:', data)
if (!filters) {
// meta.js或者meta.json没有filters字段直接跳过交于下一个metalsmith插件处理
return done()
}
// 获取所有文件的名字
const fileNames = Object.keys(files)
console.log('fileNames-fileNames-fileNames:', fileNames)
console.log('filters-filters-filters:', filters)
// 遍历meta.js或者meta.json没有filters下的所有字段
Object.keys(filters).forEach(glob => {
// 遍历所有文件名
fileNames.forEach(file => {
// 如果有文件名跟filters下的某一个字段匹配上
if (match(file, glob, { dot: true })) {
const condition = filters[glob]
// 如果metalsmith.metadata()下condition表达式不成立,删除该文件
if (!evaluate(condition, data)) {
delete files[file]
}
}
})
})
done()
}