UNPKG

think-cli

Version:

A simple CLI for scaffolding Thinkjs projects.

75 lines (65 loc) 2.01 kB
const helper = require('think-helper'); const inquirer = require('inquirer'); const fs = require('fs'); const path = require('path'); const os = require('os'); const chalk = require('chalk'); const utils = require('../../lib/utils'); const getOptions = require('../../lib/options'); const logger = require('../../lib/logger'); /** * Padding. */ console.log(); process.on('exit', function() { console.log(); }); /** * Start. */ const appRootPath = path.resolve('./'); if (!utils.isThinkApp(appRootPath)) { logger.error( 'Please execute the command in the ' + chalk.yellow.underline.bold('thinkjs project') + ' root directory' ); } const filepath = path.join(appRootPath, 'src/common'); const isMultiModule = helper.isDirectory(filepath); const packageJSONPath = path.join(appRootPath, 'package.json'); const packageJSON = require(packageJSONPath); const templateInfo = { projectName: packageJSON.name || path.relative('../', process.cwd()), templateName: 'think-template/standard', clone: false, isMultiModule }; const metaConf = getOptions(path.join(__dirname, '../../default_template'), { name: templateInfo.projectName }); const prompts = utils.compose(addMultiModulePrompt, formatPrompts)(metaConf.prompts)(templateInfo); inquirer .prompt(prompts) .then(metadata => { packageJSON.thinkjs = Object.assign(templateInfo, { metadata }); fs.writeFileSync(packageJSONPath, Buffer.from(JSON.stringify(packageJSON, null, ' '), 'binary')); console.log(''); logger.success('Migration successful'); }); function formatPrompts(prompts) { return Object .keys(prompts) .map(key => Object.assign({ name: key }, prompts[key])); } function addMultiModulePrompt(prompts) { return options => { const multiModulePrompt = { name: 'defaultModule', type: 'string', message: 'Please enter a default module name', default: 'home' }; return options.isMultiModule ? [...prompts, multiModulePrompt] : prompts; }; }