UNPKG

cc-core-cli

Version:

Command Line Interface tool for generating project templates for the (Your Platform's Name) platform.

121 lines (98 loc) 3.67 kB
#! /usr/bin/env node const yargs = require("yargs"); const fs = require('fs-extra') const ora = require('ora') const { exec } = require('child_process') const jsonfile = require('jsonfile'); const usage = "\nUsage: cc-cli <action> to execute the cli"; const options = yargs .usage(usage) .argv; const action = options['_'][0] || '' if (!['init', 'upgrade', 'admin', 'genpkg', 'admin_v3'].includes(action)) { console.log('Please type a valid action [init | upgrade | admin | genpkg]') return false } if (action === 'init') { const project = options['_'][1] || '.' const path = options['_'][2] || '.' if (!['core', 'core_v3', 'admin', 'module', 'admin_module', 'admin_v3'].includes(project)) { console.log('Project should be one of [core|core_v3|admin|admin_v3|module|admin_module]!') return false } if (path !== '.') { fs.ensureDirSync(path) } const spinner = ora('(1/1) Copying files!').start(); fs.copySync(`${__dirname}/../template/${project}`, path) if (['core', 'core_v3', 'admin', 'admin_v3'].includes(project)) { fs.renameSync(`${path}/_env`, `${path}/.env`) fs.renameSync(`${path}/_gitignore`, `${path}/.gitignore`) fs.renameSync(`${path}/_npmrc`, `${path}/.npmrc`) } spinner.succeed('(1/1) Copying files!') if (path !== '.') { process.chdir(path) } // spinner.succeed('(2/2) Ignore run npm install!') // spinner.start('(2/2) Running npm install!') // exec('npm install', (err) => { // if (err) { // return spinner.fail('(2/2) Running npm install!') // } // spinner.succeed('(2/2) Running npm install!') // }) } if (action === 'upgrade') { const project = options['_'][1] || '.' if (!['core', 'core_v3', 'admin', 'admin_v3', 'module'].includes(project)) { console.log('Project should be one of [core|admin|admin_v3|module]!') return false } const spinner = ora('(1/2) Copying files!').start(); const IGNORE_FILES = ['src/modules', 'docker-compose.yml', 'Dockerfile', 'package.json', 'version.json', 'README.md', 'custom.less', '.env.develop', '_env', '_gitignore', '_npmrc']; fs.copySync(`${__dirname}/../template/${project}`, '.', { recursive: true, filter: (name) => { return !IGNORE_FILES.find(f => name.includes(f)) } }) spinner.succeed('(1/2) Copying files!') spinner.start('(2/2) Running npm install!') exec('npm install', (err) => { if (err) { return spinner.fail('(2/2) Running npm install!') } spinner.succeed('(2/2) Running npm install!') }) } if (action === 'admin') { const path = options['_'][1] || '.' if (path !== '.') { fs.ensureDirSync(path) } const spinner = ora('(1/1) Copying files!').start(); fs.copySync(`${__dirname}/../admin`, path) spinner.succeed('(1/1) Copying files!') } if (action === 'genpkg') { const mode = options['_'][1] || ''; if (!['core', 'admin'].includes(mode)) { console.error('Please type a valid mode [core|admin]'); return false; } const path = options['_'][2] || '.'; if (path === '.') { console.error('Destination path does not same with current path'); return false; } fs.ensureDirSync(path); const pkgTemplate = jsonfile.readFileSync(`${__dirname}/../${action}/${mode}/package.json`); const pkgBuild = jsonfile.readFileSync(`./package.json`); pkgTemplate.version = pkgBuild.version; pkgTemplate.description = pkgBuild.description; pkgTemplate.dependencies = pkgBuild.dependencies; pkgTemplate.devDependencies = pkgBuild.devDependencies; jsonfile.writeFileSync(`${path}/package.json`, pkgTemplate, { spaces: 2 }) console.log(`Generate ${mode} package.json file successfully.`) }