@lcap/builder
Version:
lcap builder utils
145 lines (128 loc) • 4.61 kB
JavaScript
import path, { dirname } from 'path';
import { fileURLToPath } from 'url';
import chalk from 'chalk';
import fse from 'fs-extra';
import semver from 'semver';
import { program } from 'commander';
import commands from '../lib/commands/index.js';
const {
screenshot,
build,
deploy,
overload,
watch,
create,
play,
parse,
} = commands;
// eslint-disable-next-line no-underscore-dangle
const __dirname = dirname(fileURLToPath(import.meta.url));
function checkNodeVersion(requireNodeVersion, frameworkName = 'lcap-scripts') {
if (!semver.satisfies(process.version, requireNodeVersion)) {
console.log();
console.log(chalk.red(` You are using Node ${process.version}`));
console.log(chalk.red(` ${frameworkName} requires Node ${requireNodeVersion}, please update Node.`));
console.log();
console.log();
process.exit(1);
}
}
// eslint-disable-next-line wrap-iife
(async () => {
const packageInfo = await fse.readJSON(path.join(__dirname, '../package.json'));
checkNodeVersion(packageInfo.engines.node, packageInfo.name);
program.version(packageInfo.version).usage('<command> [options]');
const cwd = process.cwd();
program.command('screenshot')
.description('批量 block.stories 截图')
.argument('<folder>', '组件文件夹')
.option('--port <port>', '设置端口', '6006')
.action(async (folder, { port }) => {
await screenshot(cwd, port, folder);
});
program.command('build')
.description('构建流程,vite build 生成 theme.config.json usage.json, nasl.ui.json, i18n.json 等文件')
.option('--staging', '预览构建, 不构建耗时的任务,例如 pack, 模块构建')
.action(async (options) => {
await build(cwd, options);
});
program.command('deploy')
.description('发布流程')
.option('--images', '发布图片')
.option('--platform <platform>', '发布cdn 地址')
.option('--username <username>', '发布username')
.option('--password <password>', '发布password')
.option('--bucket <bucket>', '发布 bucket')
.action(async ({ ...args }) => {
await deploy(cwd, args);
});
program.command('create')
.description('创建依赖库组件、逻辑...')
.option('--component', '创建组件')
.option('--logic', '创建逻辑')
.option('--schema <schema>', '通过 schema 文件创建组件')
.option('--prompt <prompt>', '创建组件时,输入信息,JSON 格式')
.option('--name <name>', '创建组件时,输入组件名称')
.action(async (options) => {
await create(cwd, {
...options,
});
});
program.command('overload')
.description('重载组件')
.argument('<component>', '组件名称')
.option('--fork', '是否复制组件源代码')
.option('--prefix <prefix>', '重载组件名称前缀')
.action(async (component, options) => {
await overload(cwd, {
fork: options.fork,
prefix: options.prefix,
component,
});
});
program.command('watch')
.description('监听文件变化重新构建')
.option('--port <port>', '端口')
.option('--https', '启动https')
.action(async ({ ...args }) => {
await watch(cwd, args);
});
program.command('parse')
.description('解析 npm 包')
.argument('<pkg>', 'npm 包名,例如: antd、 element-ui@beta')
.option('-l, --local <local>', '本地包路径')
.option('-o, --output <file>', '输出的文件名, 默认 schema.json')
.option('-t, --tempDir <dir>', '临时目录')
.option('-n, --npmClient <client>', 'npm 客户端,npm、yarn、pnpm, 默认npm')
.option('--generate', '解析完成后是否生成代码')
.action(async (pkg, options) => {
await parse(cwd, {
...options,
pkg,
});
});
program.command('play')
.description('api.ts可视化编辑')
.option('--port <port>', '端口')
.option('--https', '启动https')
.option('--noPreview', '不启动预览')
.option('--noWatch', '不监听文件变化自动构建')
.option('--platform <platform>', '平台地址,默认读取 lcap 配置')
.option('--version <version>', 'IDE 版本号,默认 4.0.0')
.action(async ({ ...args }) => {
await play(cwd, args);
});
program.parse(process.argv);
const proc = program.runningCommand;
if (proc) {
proc.on('close', process.exit.bind(process));
proc.on('error', () => {
process.exit(1);
});
}
const subCmd = program.args[0];
if (!subCmd) {
program.help();
}
})();