import fs = require('fs-extra'); import path = require('path'); import chalk = require('chalk'); import clearConsole from './utils/clearConsole'; import createQuestions from './questions/packages'; import options from './options'; import readJson from './utils/readJson'; import createSpawnCmd from './utils/createSpawnCmd'; export default async function (name: string): Promise { // CLI package 文件夹路径 options.src = path.resolve(__dirname, '../packages'); // 获取基础参数 options.name = name; options.dest = process.cwd(); if (name === undefined) { // 执行自定义选项 await createQuestions(); } else { const plugins = await readJson('plugins.json'); const plugin = plugins.find(item => item.value === name); if (plugin !== undefined) { options.plugins = [name]; } else { console.log(chalk.red('The plugin not found')); process.exit(1); } } } export async function copyPlugins(): Promise { const pluginsPromise = options.plugins.map((name) => { const plugin = options.allPackages.find(item => item.name === name); const src = path.resolve(options.src, plugin.name, 'src'); const dest = path.resolve(options.dest, plugin.dest); return fs.copy(src, dest); }) await Promise.all(pluginsPromise) } export async function install(): Promise { const packages = []; options.plugins.forEach((pluginName) => { const { dependencies } = options.allPackages.find(item => item.name === pluginName); const packageDependencies = Object.keys(dependencies).map(key => `${key}@${dependencies[key]}`) packages.push(...packageDependencies); }) const packagesStr = [...new Set(packages)].join(' ') const cmdInherit = createSpawnCmd(options.dest, 'inherit'); await cmdInherit('pnpm', [`add ${packagesStr} --D`]); } export async function pluginConsole(): Promise { const installed = []; options.plugins.forEach(pluginName => { const plugin = options.allPackages.find(item => item.name === pluginName); if (plugin) installed.push(plugin); }) clearConsole('cyan', `KK-CLI v${options.version}`); console.log(chalk.cyan('Plugins added completed:')); console.log(''); installed.forEach(item => { console.log(`- ${item.description} [${chalk.green(item.version)}] (${item.dest})`); }) }