【架构优化】从 runtime.installNPMCLI 中拆出 npm 参数拼装 npmCLIInstallArgs 与安装结果启用 activateNPMStage

未关闭
#485 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@fx-kurumi 已经在做这个了。

开始于 2026年11月13日。

  • #487 来自 @fx-kurumi —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
30/100
Issue 类型
重构
描述清晰度
描述清楚
活跃度
活跃
技术栈
go
领域
tooling

调研方向

Start in internal/runtime/cli_ondemand.go, where installNPMCLI mixes directory setup, npm argument assembly and stage activation. Check open pull request #487 first, since work on this split may already be under way. Done means npmCLIInstallArgs and activateNPMStage exist as private helpers with unit tests, installNPMCLI keeps its signature, and go test ./internal/runtime/ passes.

由索引模型根据 Issue 内容生成。

描述

现状问题

internal/runtime/cli_ondemand.go 的 installNPMCLI 约 45 行,把三件事写在一个函数里:

  1. 准备安装目录与临时 stage 目录;
  2. 拼装 npm install 参数(--engine-strict / --engine-strict=false 依 RelaxEngines 切换)并执行;
  3. 校验 stage 内可执行文件、替换 current 目录、返回最终路径。

参数拼装是纯逻辑,却只能通过伪造 npm 可执行文件的集成测试间接覆盖;启用安装结果的逻辑也无法单独测试。

重构方案

  • 拆出纯函数 npmCLIInstallArgs(stage string, spec onDemandCLI) []string,负责参数拼装;
  • 拆出 activateNPMStage(parent, stage, binary string) (string, error),负责校验可执行文件、替换 current 并返回路径;
  • installNPMCLI 只保留目录准备、执行 npm 与调用上面两个函数,签名与调用方不变;参数顺序、报错文字逐字保持一致。

影响范围

仅 internal/runtime/cli_ondemand.go,包内私有函数,不影响对外接口和行为。

验证方式

  • 新增单元测试覆盖 npmCLIInstallArgs(严格/放宽 engines 两种)与 activateNPMStage(成功替换旧 current、缺可执行文件报错);
  • 现有 cli_ondemand_test.go 集成测试保持通过;
  • gofmt、go vet ./internal/runtime/、go test ./internal/runtime/。
主要语言
Go
星标
141
派生
28
平均合并
1 天 15 小时
30 天内合并 PR
113

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Tencent/LoopForge 的其他 Issue

查看 Tencent/LoopForge 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。