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

Aberta
#485 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@fx-kurumi já está trabalhando nisso.

Desde 13/11/2026.

  • #487 de @fx-kurumi — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
30/100
Tipo de issue
Refatoração
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
go
Domínio
tooling

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

现状问题

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/。
Linguagem predominante
Go
Estrelas
141
Forks
28
Merge médio
1d 15h
PRs com merge (30d)
113

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de Tencent/LoopForge

Todas as issues de Tencent/LoopForge

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.