From 80ee16a50db036c3dec5582de7be4d22d0ccacc7 Mon Sep 17 00:00:00 2001 From: Victor Bo Date: Thu, 4 Jul 2024 21:42:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dcreate=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=9C=A8=E6=9F=90=E4=BA=9B=E6=83=85=E5=86=B5=E5=8D=A1?= =?UTF-8?q?=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E7=BB=9F=E4=B8=80?= =?UTF-8?q?create=E8=84=9A=E6=9C=AC=E5=85=A5=E5=8F=A3=20(#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 -- scripts/create-function.ts | 17 ++++++++------- scripts/create-subpackage.ts | 19 ++++++++--------- scripts/create.ts | 40 +++++++++++++++++++----------------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 39831c8..174364a 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,6 @@ "node": ">=18.0.0" }, "scripts": { - "create:subpackage": "esno scripts/create-subpackage.ts", - "create:function": "esno scripts/create-function.ts", "create": "esno scripts/create.ts", "build": "pnpm -r --filter=./packages/* run build", "docs": "pnpm -F xparcai-utils-docs run docs:dev", diff --git a/scripts/create-function.ts b/scripts/create-function.ts index c8ca641..fd33f7c 100644 --- a/scripts/create-function.ts +++ b/scripts/create-function.ts @@ -1,11 +1,9 @@ -import process from 'node:process' import fs from 'node:fs' +import process from 'node:process' import prompts from '@posva/prompts' import ora from 'ora' import { loadFunction, loadSubpackage, packagePrefix, resolveRealPath, spinnersPrefixText, toCamelCase, writeSubpackageFunction, writeSubpackageFunctionTest } from './utils' -const [, , ...args] = process.argv - // 写子包的index.ts - 这里侧重的是增加导出 function writeSubpackageIndex(subpackageName: string, functionName: string) { const exportPath = resolveRealPath(`../packages/${subpackageName}/index.ts`) @@ -15,9 +13,7 @@ function writeSubpackageIndex(subpackageName: string, functionName: string) { } // 创建函数 -export async function createFunction() { - let subpackageName = args[0] - let functionName = args[1] +export async function createFunction(subpackageName?: string, functionName?: string) { const { choices } = loadSubpackage() if (!subpackageName || !functionName) { // 无参调起交互式命令行 @@ -40,6 +36,10 @@ export async function createFunction() { }, }, ]) + if (!response?.subpackage || !response.name) { + console.log('未能获取明确的包名和函数名,终止创建!') + process.exit(1) + } subpackageName = response.subpackage.trim() functionName = response.name.trim() } @@ -51,7 +51,8 @@ export async function createFunction() { // 校验方法是否存在 if (functionDirNames.includes(functionName)) { - return console.error(`方法${functionName}已存在`) + console.log(`子包${subpackageName}中,方法${functionName}已存在,终止创建!`) + process.exit(1) } const spinners = ora() @@ -62,5 +63,3 @@ export async function createFunction() { writeSubpackageFunctionTest(subpackageName!, functionName) spinners.succeed(`${spinnersPrefixText}创建[${packagePrefix}/${subpackageName}] => ${functionName}成功`) } - -await createFunction() diff --git a/scripts/create-subpackage.ts b/scripts/create-subpackage.ts index 5646ff3..ceadfea 100644 --- a/scripts/create-subpackage.ts +++ b/scripts/create-subpackage.ts @@ -1,14 +1,12 @@ -import process from 'node:process' import fs from 'node:fs' import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' +import process from 'node:process' import ora from 'ora' import MagicString from 'magic-string' import prompts from '@posva/prompts' import { loadFunction, loadSubpackage, packagePrefix, resolveRealPath, runCommand, sortJsonObject, spinnersPrefixText, toCamelCase, toLinesCase, writeSubpackageFunction, writeSubpackageFunctionTest } from './utils' -const [, , ...args] = process.argv - // 复制模板 function copyTemplate(templatePath: string, subpackagePath: string, functionName: string) { const templateDirPath = resolveRealPath(templatePath) @@ -90,10 +88,7 @@ function pnpmInstall() { } // 创建子包 -export async function createSubpackage() { - let subpackageName = args[0] - let functionName = args[1] - +export async function createSubpackage(subpackageName?: string, functionName?: string) { if (!subpackageName || !functionName) { // 无参调起交互式命令行 const response = await prompts([ @@ -120,6 +115,10 @@ export async function createSubpackage() { }, }, ]) + if (!response?.subpackage || !response.function) { + console.log('未能获取明确的包名和函数名,终止创建!') + process.exit(1) + } subpackageName = response.subpackage.trim() functionName = response.function.trim() } @@ -133,14 +132,14 @@ export async function createSubpackage() { // 校验子包是否存在 if (subpackageDirNames.includes(subpackageName)) { - return console.error(`子包${subpackageName}已存在`) + return console.log(`子包${subpackageName}已存在,终止创建!`) } const { dirNames: functionDirNames } = loadFunction(subpackageName) // 校验方法是否存在 if (functionDirNames.includes(functionName)) { - return console.error(`方法${functionName}已存在`) + return console.log(`子包${subpackageName}中,方法${functionName}已存在,终止创建!`) } const spinners = ora() @@ -167,5 +166,3 @@ export async function createSubpackage() { spinners.fail(`${spinnersPrefixText}创建[${packagePrefix}/${subpackageName}]子包失败`) }) } - -await createSubpackage() diff --git a/scripts/create.ts b/scripts/create.ts index 9e8a6bf..daedaf5 100644 --- a/scripts/create.ts +++ b/scripts/create.ts @@ -1,42 +1,44 @@ import process from 'node:process' import prompts from '@posva/prompts' -import { loadSubpackage, runCommand } from './utils' +import { loadSubpackage } from './utils' +import { createSubpackage } from './create-subpackage' +import { createFunction } from './create-function' const [, , ...args] = process.argv +const choices = [ + { title: '创建子包', value: 'subpackage' }, + { title: '创建函数', value: 'function' }, +] + +const fnMap = { + subpackage: createSubpackage, + function: createFunction, +} + async function create() { - console.log('--------') - console.log(args.length, process.cwd()) if (args.length !== 2) { const response = await prompts([ { name: 'type', type: 'select', message: '请选择子包', - choices: [ - { title: '创建子包', value: 'subpackage' }, - { title: '创建函数', value: 'function' }, - ], + choices, }, ]) + if (!response?.type) { + console.log('未能获取明确的创建类型,终止创建!') + process.exit(1) + } const type: 'subpackage' | 'function' = response.type - runCommand(`pnpm run create:${type}`, process.cwd(), { silent: false }) + await fnMap[type]() } else { const subpackageName = args[0] const functionName = args[1] - const { dirNames: subpackageDirNames } = loadSubpackage() - - // 校验子包是否存在 - if (!subpackageDirNames.includes(subpackageName)) { - // 不存在: 创建子包 - runCommand(`pnpm run create:subpackage ${subpackageName} ${functionName}`, process.cwd(), { silent: false }) - } - else { - // 存在: 创建函数 - runCommand(`pnpm run create:function ${subpackageName} ${functionName}`, process.cwd(), { silent: false }) - } + const type = !subpackageDirNames.includes(subpackageName) ? 'subpackage' : 'function' + await fnMap[type](subpackageName, functionName) } }