refactor: 将 .spaceflow 配置迁移到根目录 .spaceflowrc,统一使用 workspace: 协议管理依赖

- 删除 .spaceflow/spaceflow.json,将完整配置合并到根目录 .spaceflowrc
- .spaceflow/package.json 依赖从 link: 协议改为 workspace: 协议
- .spaceflowrc 中 dependencies 配置同步改为 workspace: 协议
- pnpm-workspace.yaml 新增 .spaceflow 到 workspace 包列表
- install.service.ts 新增 workspace: 协议支持,跳过 workspace 依赖的构建步骤
- source
This commit is contained in:
Lyda
2026-02-25 19:08:06 +08:00
parent 538f7b0e1b
commit 0aff2afa61
7 changed files with 113 additions and 79 deletions

View File

@@ -1,11 +1,11 @@
{
"name": "spaceflow-local",
"name": "spaceflow",
"private": true,
"dependencies": {
"@spaceflow/scripts": "link:../extensions/scripts",
"@spaceflow/shell": "link:../extensions/shell",
"@spaceflow/core": "link:../packages/core",
"@spaceflow/publish": "link:../extensions/publish",
"@spaceflow/review": "link:../extensions/review"
"@spaceflow/core": "workspace:*",
"@spaceflow/scripts": "workspace:*",
"@spaceflow/shell": "workspace:*",
"@spaceflow/publish": "workspace:*",
"@spaceflow/review": "workspace:*"
}
}

View File

@@ -1,55 +0,0 @@
{
"$schema": "./config-schema.json",
"gitProvider": {
"provider": "github",
"serverUrl": "https://api.github.com"
},
"review": {
"references": ["./references"],
"includes": ["*/**/*.ts", "!*/**/*.spec.*", "!*/**/*.config.*"],
"generateDescription": true,
"autoUpdatePrTitle": true,
"lineComments": true,
"verifyFixes": true,
"analyzeDeletions": false,
"deletionAnalysisMode": "open-code",
"concurrency": 1,
"retries": 3,
"retryDelay": 1000
},
"dependencies": {
"@spaceflow/shell": "link:./extensions/shell",
"@spaceflow/scripts": "link:./extensions/scripts",
"@spaceflow/review": "link:./extensions/review",
"@spaceflow/publish": "link:./extensions/publish"
},
"support": ["claudeCode"],
"publish": {
"monorepo": { "enabled": true, "propagateDeps": true },
"changelog": {
"preset": {
"type": [
{ "type": "feat", "section": "新特性" },
{ "type": "fix", "section": "修复BUG" },
{ "type": "perf", "section": "性能优化" },
{ "type": "refactor", "section": "代码重构" },
{ "type": "docs", "section": "文档更新" },
{ "type": "style", "section": "代码格式" },
{ "type": "test", "section": "测试用例" },
{ "type": "chore", "section": "其他修改" }
]
}
},
"npm": {
"publish": true,
"packageManager": "pnpm",
"tag": "latest",
"ignoreVersion": true,
"versionArgs": ["--workspaces false"]
},
"git": {
"lockBranch": false,
"pushWhitelistUsernames": ["github-actions[bot]"]
}
}
}

View File

@@ -1,4 +1,55 @@
{
"$schema": ".spaceflow/config-schema.json",
"support": ["claudeCode", "windsurf"]
"gitProvider": {
"provider": "github",
"serverUrl": "https://api.github.com"
},
"review": {
"references": ["./references"],
"includes": ["*/**/*.ts", "!*/**/*.spec.*", "!*/**/*.config.*"],
"generateDescription": true,
"autoUpdatePrTitle": true,
"lineComments": true,
"verifyFixes": true,
"analyzeDeletions": false,
"deletionAnalysisMode": "open-code",
"concurrency": 1,
"retries": 3,
"retryDelay": 1000
},
"dependencies": {
"@spaceflow/shell": "workspace:*",
"@spaceflow/scripts": "workspace:*",
"@spaceflow/review": "workspace:*",
"@spaceflow/publish": "workspace:*"
},
"support": ["claudeCode"],
"publish": {
"monorepo": { "enabled": true, "propagateDeps": true },
"changelog": {
"preset": {
"type": [
{ "type": "feat", "section": "新特性" },
{ "type": "fix", "section": "修复BUG" },
{ "type": "perf", "section": "性能优化" },
{ "type": "refactor", "section": "代码重构" },
{ "type": "docs", "section": "文档更新" },
{ "type": "style", "section": "代码格式" },
{ "type": "test", "section": "测试用例" },
{ "type": "chore", "section": "其他修改" }
]
}
},
"npm": {
"publish": true,
"packageManager": "pnpm",
"tag": "latest",
"ignoreVersion": true,
"versionArgs": ["--workspaces false"]
},
"git": {
"lockBranch": false,
"pushWhitelistUsernames": ["github-actions[bot]"]
}
}
}

View File

@@ -659,7 +659,9 @@ export class InstallService {
const sourceType = getSourceType(source);
// 获取安装后的路径
const packageName = await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
const packageName = source.startsWith("workspace:")
? name
: await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
const depPath = join(spaceflowDir, "node_modules", packageName);
if (!existsSync(depPath)) {
@@ -685,8 +687,8 @@ export class InstallService {
});
}
// 对于本地路径的 Extension需要构建
if (sourceType === "local") {
// 对于本地路径的 Extension需要构建workspace: 类型不需要,已在 workspace 中构建)
if (sourceType === "local" && !source.startsWith("workspace:")) {
const normalizedSource = normalizeSource(source);
const sourcePath = resolve(cwd, normalizedSource);
await this.ensureDependenciesAndBuild(sourcePath, name, verbose);
@@ -719,24 +721,30 @@ export class InstallService {
}
let updated = false;
for (const [, config] of Object.entries(dependencies)) {
for (const [name, config] of Object.entries(dependencies)) {
const { source, ref } = this.parseExtensionConfig(config);
const sourceType = getSourceType(source);
let packageSpec: string;
if (sourceType === "local") {
let packageName: string;
if (source.startsWith("workspace:")) {
// workspace 协议:直接透传
packageName = name;
packageSpec = source;
} else if (sourceType === "local") {
const normalizedSource = normalizeSource(source);
const relativePath = join("..", normalizedSource);
packageSpec = `link:${relativePath}`;
packageName = await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
} else if (sourceType === "git") {
packageSpec = source.startsWith("git+") ? source : buildGitPackageSpec(source, ref);
packageName = await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
} else {
packageSpec = source;
packageName = await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
}
// 获取包名
const packageName = await this.getPackageNameFromSource(source, sourceType, spaceflowDir);
if (pkg.dependencies[packageName] !== packageSpec) {
pkg.dependencies[packageName] = packageSpec;
updated = true;

View File

@@ -22,6 +22,7 @@ export function isGitUrl(source: string): boolean {
*/
export function isLocalPath(source: string): boolean {
return (
source.startsWith("workspace:") ||
source.startsWith("link:") ||
source.startsWith("./") ||
source.startsWith("../") ||

46
pnpm-lock.yaml generated
View File

@@ -81,6 +81,24 @@ importers:
specifier: 'catalog:'
version: 5.9.3
.spaceflow:
dependencies:
'@spaceflow/core':
specifier: workspace:*
version: link:../packages/core
'@spaceflow/publish':
specifier: workspace:*
version: link:../extensions/publish
'@spaceflow/review':
specifier: workspace:*
version: link:../extensions/review
'@spaceflow/scripts':
specifier: workspace:*
version: link:../extensions/scripts
'@spaceflow/shell':
specifier: workspace:*
version: link:../extensions/shell
actions:
dependencies:
'@actions/cache':
@@ -208,7 +226,7 @@ importers:
version: 1.26.0(zod@4.3.6)
'@rspack/cli':
specifier: ^1.7.4
version: 1.7.4(@rspack/core@1.7.4)(@types/express@4.17.25)(webpack@5.103.0(@swc/core@1.15.3))
version: 1.7.4(@rspack/core@1.7.4)(webpack@5.103.0(@swc/core@1.15.3))
'@rspack/core':
specifier: ^1.7.4
version: 1.7.4
@@ -6150,11 +6168,11 @@ snapshots:
'@rspack/binding-win32-ia32-msvc': 1.7.4
'@rspack/binding-win32-x64-msvc': 1.7.4
'@rspack/cli@1.7.4(@rspack/core@1.7.4)(@types/express@4.17.25)(webpack@5.103.0(@swc/core@1.15.3))':
'@rspack/cli@1.7.4(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))':
dependencies:
'@discoveryjs/json-ext': 0.5.7
'@rspack/core': 1.7.4
'@rspack/dev-server': 1.1.5(@rspack/core@1.7.4)(@types/express@4.17.25)(webpack@5.103.0(@swc/core@1.15.3))
'@rspack/dev-server': 1.1.5(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))
exit-hook: 4.0.0
webpack-bundle-analyzer: 4.10.2
transitivePeerDependencies:
@@ -6166,11 +6184,11 @@ snapshots:
- webpack
- webpack-cli
'@rspack/cli@1.7.4(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))':
'@rspack/cli@1.7.4(@rspack/core@1.7.4)(webpack@5.103.0(@swc/core@1.15.3))':
dependencies:
'@discoveryjs/json-ext': 0.5.7
'@rspack/core': 1.7.4
'@rspack/dev-server': 1.1.5(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))
'@rspack/dev-server': 1.1.5(@rspack/core@1.7.4)(webpack@5.103.0(@swc/core@1.15.3))
exit-hook: 4.0.0
webpack-bundle-analyzer: 4.10.2
transitivePeerDependencies:
@@ -6188,11 +6206,11 @@ snapshots:
'@rspack/binding': 1.7.4
'@rspack/lite-tapable': 1.1.0
'@rspack/dev-server@1.1.5(@rspack/core@1.7.4)(@types/express@4.17.25)(webpack@5.103.0(@swc/core@1.15.3))':
'@rspack/dev-server@1.1.5(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))':
dependencies:
'@rspack/core': 1.7.4
chokidar: 3.6.0
http-proxy-middleware: 2.0.9(@types/express@4.17.25)
http-proxy-middleware: 2.0.9(@types/express@5.0.5)
p-retry: 6.2.1
webpack-dev-server: 5.2.2(webpack@5.103.0(@swc/core@1.15.3))
ws: 8.18.3
@@ -6205,11 +6223,11 @@ snapshots:
- webpack
- webpack-cli
'@rspack/dev-server@1.1.5(@rspack/core@1.7.4)(@types/express@5.0.5)(webpack@5.103.0(@swc/core@1.15.3))':
'@rspack/dev-server@1.1.5(@rspack/core@1.7.4)(webpack@5.103.0(@swc/core@1.15.3))':
dependencies:
'@rspack/core': 1.7.4
chokidar: 3.6.0
http-proxy-middleware: 2.0.9(@types/express@5.0.5)
http-proxy-middleware: 2.0.9
p-retry: 6.2.1
webpack-dev-server: 5.2.2(webpack@5.103.0(@swc/core@1.15.3))
ws: 8.18.3
@@ -8011,6 +8029,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
http-proxy-middleware@2.0.9:
dependencies:
'@types/http-proxy': 1.17.17
http-proxy: 1.18.1
is-glob: 4.0.3
is-plain-obj: 3.0.0
micromatch: 4.0.8
transitivePeerDependencies:
- debug
http-proxy-middleware@2.0.9(@types/express@4.17.25):
dependencies:
'@types/http-proxy': 1.17.17

View File

@@ -3,6 +3,7 @@ packages:
- extensions/*
- actions
- docs
- .spaceflow
catalogs:
default: