const fsExtra = require('fs-extra') const path = require('path') const chalk = require('chalk') const fs = require('fs') /** * 将函数封装成promise */ const promisify = fn => { return function () { let args = arguments; return new Promise(function (resolve, reject) { [].push.call(args, function (err, result) { if (err) { console.log(err) reject(err); } else { resolve(result); } }); fn.apply(null, args); }); } } const readdir = promisify(fs.readdir) const stat = promisify(fs.stat) /** * 封装打印工具 */ const {log} = console const chalkTag = { info: msg => log([chalk.bgBlue.black(' INFO '), msg].join(' ')), done: msg => log([chalk.bgGreen.black(' DONE '), msg].join(' ')), warn: msg => log([chalk.bgYellow.black(' WARN '), msg].join(' ')), error: msg => log([chalk.bgRed.black(' ERROR '), msg].join(' ')), } /** * 遍历应用的方法 */ const findApp = (dir, cb) => { fsExtra.ensureDirSync(dir) return readdir(dir).then(apps => { return Promise.all(apps.map(e => { let cPath = path.join(dir, e) return stat(cPath).then(state => { if (state.isDirectory()) { return findApp(cPath, cb) } else if (state.isFile()) { cb && cb(dir) } }) }) || []) }) } const findPages = (dir, cb) => { fsExtra.ensureDirSync(dir) return readdir(dir).then(apps => { return Promise.all(apps.map(e => { let cPath = path.join(dir, e) return stat(cPath).then(state => { if (state.isDirectory()) { return findPages(cPath, cb) } else if (state.isFile()) { cb && cb(cPath) } }) }) || []) }) } const copyFiles = (dir, source = 'src/mods') => { chalkTag.info(`开始扫描${source}...`) return new Promise(resolve => { fsExtra.emptyDir(dir, err => { if (!err) { fsExtra.copy(source, dir).then(() => { chalkTag.done(source + ' 扫描完毕') resolve() }) } }) }) } module.exports = {findApp, chalkTag, fsExtra, copyFiles, fs, path, findPages}