cyb-cli
Version:
塞伯坦CYB-CLI是面向前端模块化工程的构建工具。主要目的是帮助开发者统一前端开发模式和项目开发结构,提高功能扩展和降低维护成本,自动化前端工作流,提高开发效率和开发质量。
178 lines (150 loc) • 5.75 kB
JavaScript
// const mkdirp = require('mkdirp')
// const path = require('path')
// const ora = require('ora')
// const download = require('download-git-repo')
// const fancyLog = require('fancy-log')
// const chalk = require('chalk')
// const inquirer = require('inquirer')
// const Handlebars = require('handlebars')
// const cons = require('consolidate')
// const fs = require('fs')
// const del = require('del')
// const merge = require('webpack-merge')
// // register handlebars helper
// Handlebars.registerHelper('if_eq', function(a, b, opts) {
// return a === b ?
// opts.fn(this) :
// opts.inverse(this)
// })
// Handlebars.registerHelper('if_contain', function(a, b, opts) {
// const arr = a || []
// return arr.includes(b) ?
// opts.fn(this) :
// opts.inverse(this)
// })
// const parseJson = (objStr) => {
// return new Function("return " + objStr)()
// }
// const mergeJson = (prjectFile, modelFile, modelConfig) => {
// return new Promise((resolve, reject) => {
// fs.readFile(prjectFile, 'utf8', (error, fsData) => {
// if (error) {
// throw new Error(error)
// }
// cons.handlebars(modelFile, modelConfig)
// .then((content) => {
// const fileContent = JSON.stringify(merge(parseJson(fsData), parseJson(content)), null, 2)
// fs.writeFile(prjectFile, fileContent, (error) => {
// if (error) {
// throw new Error(error)
// }
// fancyLog(chalk.green(`成功配置:${prjectFile}`))
// resolve()
// })
// })
// .catch((error) => {
// if (error) {
// throw new Error(error)
// }
// })
// })
// })
// }
// const modelInit = (answers) => {
// return new Promise((resolve, reject) => {
// // const packagePrjectFile = path.join(process.cwd(), './package.json')
// // const packageModelFile = path.join(process.cwd(), `fez-template-model/template/package.json`)
// // const babelrcPrjectFile = path.join(process.cwd(), './.babelrc')
// // const babelrcModelFile = path.join(process.cwd(), `fez-template-model/template/.babelrc`)
// // mergeJson(packagePrjectFile, packageModelFile, { modelConfig: answers.model })
// // mergeJson(babelrcPrjectFile, babelrcModelFile, { modelConfig: answers.model })
// const fezConfigFile = path.join(process.cwd(), './fez.config.js')
// const fezConfigModelFile = path.join(process.cwd(), 'fez-template-model/template/fez.config.js')
// fs.readFile(fezConfigFile, 'utf8', (error, fsData) => {
// if (error) {
// throw new Error(error)
// }
// const matchReg = /(module.exports =|export default) {((\s|.)*)}/
// const fezConfigContent = (`{${fsData.match(matchReg)[2]}}`).replace(/(\/\/.*\s+)|(\/\*[\s\S]*?\*\/\s+)/g, '')
// console.log(fezConfigContent)
// cons.handlebars(fezConfigModelFile, { modelConfig: answers.model })
// .then((modelData) => {
// const fezConfigModelContent = `{${modelData.match(matchReg)[2]}}`
// console.log(fezConfigModelContent)
// // const mergeContent = merge.smartStrategy(mergeString(fezConfigContent))(mergeString(fezConfigModelContent), {})
// // console.log(JSON.parse(mergeString(fezConfigModelContent)))
// // console.log(merge.multiple((fezConfigContent),fezConfigModelContent))
// // let mergeTemp = []
// // Object.keys(mergeContent).forEach(function(key) {
// // mergeTemp.push(mergeContent[key])
// // });
// // console.log(mergeTemp.join(''))
// // console.log(fsData.replace(matchReg, (match, p1) => {
// // return `${p1} ${mergeTemp.join('')}`
// // }))
// // const fileContent = JSON.stringify(merge(parseJson(fsData), parseJson(content)), null, 2)
// // fs.writeFile(prjectFile, fileContent, (error) => {
// // if (error) {
// // throw new Error(error)
// // }
// // fancyLog(chalk.green(`成功配置:${prjectFile}`))
// // resolve()
// // })
// })
// .catch((error) => {
// if (error) {
// throw new Error(error)
// }
// })
// })
// })
// }
// module.exports = () => {
// inquirer.prompt([{
// type: 'checkbox',
// name: 'model',
// message: 'Select tech platform.',
// choices: [{
// name: 'jQuery',
// checked: false,
// value: 'jquery',
// short: 'jQuery',
// }, {
// name: 'Vue',
// checked: false,
// value: 'vue',
// short: 'Vue',
// }, {
// name: 'React',
// checked: false,
// value: 'react',
// short: 'React',
// }],
// }])
// .then(answers => {
// // console.log(answers)
// return modelInit(answers)
// // const tempPath = path.join(process.cwd(), `${answers.pageName}-tmp`)
// // const spinner = ora('Download template from github...').start()
// // mkdirp(tempPath, function(err) {
// // if (!err)
// // download('furic-zhao/fez-template-init', tempPath, function(error) {
// // if (!error) {
// // modelInit(answers).then(() => {
// // del(tempPath)
// // })
// // spinner.stop()
// // } else {
// // spinner.fail('Failed to download.')
// // }
// // })
// // })
// })
// .then(() => {
// })
// .catch((error) => {
// if (error) {
// throw new Error(error)
// }
// })
// }