From 509e5a410c7f2dcf0a937939478ec3f7219d52c7 Mon Sep 17 00:00:00 2001 From: "val.istar.guo" Date: Tue, 7 May 2024 19:44:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dopenapi=E7=9A=84react=20sdk?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=9E=84=E5=BB=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/spicy-dolls-kneel.md | 6 ++++ .../src/modules/sdk/compiler.service.ts | 12 +++++-- app/sdk/src/compile-asyncapi-core.ts | 2 ++ app/sdk/src/compile-openapi-core.ts | 2 ++ app/sdk/src/compile-openapi-react.ts | 3 +- app/sdk/src/compile-project.ts | 32 ++++++++++++++----- .../src/interface/compile-project-options.ts | 10 +++++- app/sdk/src/templates/openapi-react/hook.hbs | 4 +-- .../templates/openapi-react/package_json.hbs | 2 +- app/sdk/src/templates/project/_npmrc.hbs | 5 +++ package.json | 4 +-- 11 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 .changeset/spicy-dolls-kneel.md create mode 100644 app/sdk/src/templates/project/_npmrc.hbs diff --git a/.changeset/spicy-dolls-kneel.md b/.changeset/spicy-dolls-kneel.md new file mode 100644 index 0000000..a02567e --- /dev/null +++ b/.changeset/spicy-dolls-kneel.md @@ -0,0 +1,6 @@ +--- +"@opendoc/backend": patch +"@opendoc/sdk": patch +--- + +修复 openapi 的 react sdk 无法构建的问题 diff --git a/app/backend/src/modules/sdk/compiler.service.ts b/app/backend/src/modules/sdk/compiler.service.ts index c900f1e..b1c0a92 100644 --- a/app/backend/src/modules/sdk/compiler.service.ts +++ b/app/backend/src/modules/sdk/compiler.service.ts @@ -71,7 +71,7 @@ export class CompilerService { const compileDir = path.join(dir, 'compiling') try { - await exec('npm install --production=false && npm run build', { cwd: compileDir }) + await exec('npm install --production=false --legacy-peer-deps && npm run build', { cwd: compileDir }) } catch (e) { if (e instanceof Error) { if ('stdout' in e) { @@ -160,7 +160,10 @@ export class CompilerService { name: sdk.fullName, version: sdk.version, dependencies: { - core: `@${sdk.scope}/${apiDocument.code}`, + core: { + name: `@${sdk.scope}/${apiDocument.code}`, + version: sdk.version, + }, }, }, }) @@ -194,7 +197,10 @@ export class CompilerService { name: sdk.fullName, version: sdk.version, dependencies: { - core: `@${sdk.scope}/${apiDocument.code}`, + core: { + name: `@${sdk.scope}/${apiDocument.code}`, + version: sdk.version, + }, }, }, }) diff --git a/app/sdk/src/compile-asyncapi-core.ts b/app/sdk/src/compile-asyncapi-core.ts index ec2a356..02d122f 100644 --- a/app/sdk/src/compile-asyncapi-core.ts +++ b/app/sdk/src/compile-asyncapi-core.ts @@ -34,6 +34,8 @@ function compile(options: CompileAsyncapiOptions): CompileResult[] { name: options.project.name, outdir: options.outdir, version: options.project.version, + dependencies: options.project.dependencies, + registry: options.project.registry, } } diff --git a/app/sdk/src/compile-openapi-core.ts b/app/sdk/src/compile-openapi-core.ts index edafcf8..0db4958 100644 --- a/app/sdk/src/compile-openapi-core.ts +++ b/app/sdk/src/compile-openapi-core.ts @@ -43,6 +43,8 @@ function compile(options: CompileOpenapiOptions): CompileResult[] { name: options.project.name, outdir: options.outdir, version: options.project.version, + dependencies: options.project.dependencies, + registry: options.project.registry, } } diff --git a/app/sdk/src/compile-openapi-react.ts b/app/sdk/src/compile-openapi-react.ts index c6016cd..ac8ceab 100644 --- a/app/sdk/src/compile-openapi-react.ts +++ b/app/sdk/src/compile-openapi-react.ts @@ -42,6 +42,7 @@ function compile(options: CompileOpenapiOptions): CompileResult[] { outdir: options.outdir, version: options.project.version, dependencies: options.project.dependencies, + registry: options.project.registry, } } @@ -65,7 +66,7 @@ function compile(options: CompileOpenapiOptions): CompileResult[] { } { - const fileContent = templates.t_hook({ ...context }) + const fileContent = templates.t_hook(R.clone(context)) const filename = formatFilename(getSafeOperationName(pathname, method, operation)) const filepath = path.join(output, 'hooks', `${filename}.ts`) diff --git a/app/sdk/src/compile-project.ts b/app/sdk/src/compile-project.ts index cf1fce0..bb582b5 100644 --- a/app/sdk/src/compile-project.ts +++ b/app/sdk/src/compile-project.ts @@ -1,5 +1,6 @@ import * as fs from 'fs-extra' import * as path from 'path' +import * as R from 'ramda' import { readAndCompileTemplate } from './utils/read-and-compile-template' import './handlebar/register-helper.js' @@ -15,6 +16,7 @@ const templates = { t_build_sh: readAndCompileTemplate('project/build_sh'), t__gitignore: readAndCompileTemplate('project/_gitignore'), t__npmignore: readAndCompileTemplate('project/_npmignore'), + t__npmrc: readAndCompileTemplate('project/_npmrc'), } export async function compileProject(options: CompileProjectOptions): Promise { @@ -24,27 +26,40 @@ export async function compileProject(options: CompileProjectOptions): Promise - const context = { name, version } + const opts = Value.Default(CompileProjectOptions, Value.Clone(options)) as Required + + const { outdir, name, version, dependencies, registry } = opts + const context = { + package: { + name, + outdir, + version, + registry, + dependencies, + }, + } const tsconfigFilepath = path.join(outdir, 'tsconfig.json') - const tsconfigFileContent = templates.t_tsconfig_json(context) + const tsconfigFileContent = templates.t_tsconfig_json(R.clone(context)) const tsconfigEsFilepath = path.join(outdir, 'tsconfig.es.json') - const tsconfigEsFileContent = templates.t_tsconfig_es_json(context) + const tsconfigEsFileContent = templates.t_tsconfig_es_json(R.clone(context)) const tsconfigUmdFilepath = path.join(outdir, 'tsconfig.umd.json') - const tsconfigUmdFileContent = templates.t_tsconfig_umd_json(context) + const tsconfigUmdFileContent = templates.t_tsconfig_umd_json(R.clone(context)) const buildShFilepath = path.join(outdir, 'build.sh') - const buildShFileContent = templates.t_build_sh(context) + const buildShFileContent = templates.t_build_sh(R.clone(context)) const gitignoreFilepath = path.join(outdir, '.gitignore') - const gitignoreFileContent = templates.t__gitignore(context) + const gitignoreFileContent = templates.t__gitignore(R.clone(context)) const npmignoreFilepath = path.join(outdir, '.npmignore') - const npmignoreFileContent = templates.t__npmignore(context) + const npmignoreFileContent = templates.t__npmignore(R.clone(context)) + + const npmrcFilepath = path.join(outdir, '.npmrc') + const npmrcFileContent = templates.t__npmrc(R.clone(context)) await Promise.allSettled([ fs.outputFile(tsconfigFilepath, tsconfigFileContent), @@ -53,6 +68,7 @@ export async function compileProject(options: CompileProjectOptions): Promise { diff --git a/app/sdk/src/templates/openapi-react/package_json.hbs b/app/sdk/src/templates/openapi-react/package_json.hbs index f5a4d59..fd7e175 100644 --- a/app/sdk/src/templates/openapi-react/package_json.hbs +++ b/app/sdk/src/templates/openapi-react/package_json.hbs @@ -28,7 +28,7 @@ }, "peerDependencies": { - "{{package.dependencies.core}}": "{{package.version}}", + "{{package.dependencies.core.name}}": "{{package.dependencies.core.version}}", "react": ">= 16" } } diff --git a/app/sdk/src/templates/project/_npmrc.hbs b/app/sdk/src/templates/project/_npmrc.hbs new file mode 100644 index 0000000..d6c8160 --- /dev/null +++ b/app/sdk/src/templates/project/_npmrc.hbs @@ -0,0 +1,5 @@ +auto-install-peers=false + +{{#each package.registry as |registry scope|}} +{{scope}}={{registry}} +{{/each}} diff --git a/package.json b/package.json index bf0400e..0852df2 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "clean": "pnpm -r exec rm -rf node_modules && rm -rf node_modules", - "build": "turbo build --filter @opendoc/*", - "dev": "turbo dev --filter @opendoc/*" + "build": "turbo build --filter=@opendoc/* --filter=!@opendoc/frontend --filter=!@opendoc/backend", + "dev": "turbo dev --filter=@opendoc/* --filter=!@opendoc/frontend --filter=!@opendoc/backend" }, "keywords": [ "opendoc"