@iyowei/create-esm
Version:
这是一个命令行工具,给到 ESM 源码文件路径后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。
136 lines (105 loc) • 2.73 kB
JavaScript
import { Listr } from 'listr2';
import shell from 'shelljs';
import meow from 'meow';
import chalk from 'chalk'; // eslint-disable-line
import cancelOrContinue from '@iyowei/cli-cancel-or-continue';
import UpdateNotifier from 'update-notifier';
import {
banner,
mainHelp,
setupHelp,
resetHelp,
defaultsHelp,
COMMAND_SET,
COMMAND_DEFAULTS,
COMMAND_RESET,
getReport,
} from './src/messages.js';
import { CLI_FLAGS, ARG_BREAKPOINT } from './src/options/args.js';
import {
updateGlobalConfigurations,
getGlobalConfigurations,
reset,
} from './src/options/global.js';
import makeOptions from './src/options/make.js';
import prerequisites from './src/prerequisites.js';
import getTasks from './src/tasks/index.js';
/* eslint func-names: 0 */
(async function () {
// TODO: 骨架化
// 必要工具检查
prerequisites();
const cli = meow(mainHelp, {
importMeta: import.meta,
flags: CLI_FLAGS,
});
UpdateNotifier({ pkg: cli.pkg }).notify();
shell.echo(banner);
// 二级指令:修改默认设置
if (cli.input[0] === COMMAND_SET) {
if (cli.flags.help) {
shell.echo(setupHelp);
return;
}
const SETUP_KEY = cli.input[1];
const SETUP_VALUE = cli.input[2];
updateGlobalConfigurations(SETUP_KEY, SETUP_VALUE);
shell.echo(getGlobalConfigurations());
return;
}
// 二级指令:查看默认配置
if (cli.input[0] === COMMAND_DEFAULTS) {
if (cli.flags.help) {
shell.echo(defaultsHelp);
return;
}
shell.echo(getGlobalConfigurations());
return;
}
// 二级指令:清空
if (cli.input[0] === COMMAND_RESET) {
if (cli.flags.help) {
shell.echo(resetHelp);
return;
}
reset();
shell.echo(getGlobalConfigurations());
return;
}
if (cli.input.length === 0) {
shell.echo(mainHelp);
return;
}
// 统计选项
const opts = await makeOptions(cli);
// 创建前报告
shell.echo(getReport(opts));
// 确认
await cancelOrContinue();
// 生成
// console.log(opts);
const tasks = new Listr(getTasks(opts.get(ARG_BREAKPOINT)), {
exitOnError: true,
ctx: { error: false, payload: opts },
});
const completed = await tasks.run();
if (completed.error) {
if (Array.isArray(completed.message)) {
shell.echo(
completed.message.reduce(
(acc, cur) =>
!acc
? `\n ${chalk.redBright.bold(cur)}`
: `${acc}\n ${chalk.redBright.bold(cur)}`,
'',
),
);
} else {
shell.echo(`\n ${chalk.redBright.bold(`${completed.message} !!!`)}\n`);
}
} else {
shell.echo('');
}
// shell.echo(completed);
})();