UNPKG

@lcap/builder

Version:
145 lines (128 loc) 4.61 kB
#!/usr/bin/env node 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(); } })();