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
JavaScript
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.`)
}