UNPKG

prince-cli

Version:

automatic tool for h5 SPA development.

89 lines (75 loc) 2.69 kB
const fs = require('fs'); const stat = fs.stat; String.prototype.render = function(context) { const tokenReg = /(\\)?\{\{([^\{\}\\]+)(\\)?\}\}/g; return this.replace(tokenReg, function (word, slash1, token, slash2) { if (slash1 || slash2) { return word.replace('\\', ''); } const variables = token.replace(/\s/g, '').split('.'); let currentObject = context; let i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { variable = variables[i]; currentObject = currentObject[variable]; if (currentObject === undefined || currentObject === null) { return ''; } } return currentObject; }); }; let PN; const copy = (src, dst) => { fs.readdir(src, (err, paths) => { if (err) { throw err; } paths.forEach(path => { const _src = src + '/' + path; const _dst = dst + '/' + path; let readable; let writable; stat(_src, (err, st) => { if (err) { throw err; } if (st.isFile()) { const rDist = _dst.render({ PN }); readable = fs.createReadStream(_src); writable = fs.createWriteStream(rDist); readable.pipe(writable); writable.on('close', function() { fs.readFile(rDist, 'utf8', (err, files) => { if (err) { throw err; } const result = files.render({ PN }); fs.writeFile(rDist, result, 'utf8', () => { console.log('\x1B[32m[prince]\x1B[0m file---%s', rDist); }); }); }); } else if (st.isDirectory() && path !== 'node_modules') { addPage(_src, _dst); } }); }); }); }; const addPage = (src, dst, project) => { if (project) { PN = project; } fs.exists(dst, exists => { if (exists) { console.log('\x1B[31m[prince]\x1B[0m page \'%s\' is exist!', project); } else { fs.mkdir(dst, () => { console.log('\x1B[32m[prince]\x1B[0m dir---%s', dst); copy(src, dst); }); } }); }; module.exports = addPage;