用途:把 Nx monorepo 里的某个包从旧的集中式 dist 构建(../../dist/packages/<name>)迁移为本地 packages/<name>/dist/ 构建,与 nx、devkit 现有模式一致。用户提供包名(如 js、webpack、angular),包位于 packages/<name>/。
主要能力与步骤:先做预检,检查 package.json 中所有 workspace:* 依赖,若目标包未把 release.version.manifestRootsToUpdate 覆盖为 ["packages/{projectName}"],则必须先一并迁移,否则发布时 pnpm 会解析到未升版的源版本导致 ERR_PNPM_NO_MATCHING_VERSION。随后读取 package.json、project.json、tsconfig.lib.json、tsconfig.spec.json、eslint 配置、assets.json、.npmignore、.gitignore 及 devkit 参考实现,并用 pnpm nx show target <name>:build-base 与 <name>:build 查看推断目标。识别入口点(index.ts、testing.ts、internal.ts、ngcli-adapter.ts 等,以及 migrations.json、generators.json、executors.json)。更新 tsconfig.lib.json 为 outDir: dist、rootDir: .、declarationDir: dist、module/moduleResolution: nodenext 等;更新 tsconfig.spec.json 的 outDir 为 dist/spec;在 package.json 加 "type": "commonjs"、main/types 指向 dist、typesVersions 与 exports 映射(含 @nx/nx-source 条件、./package.json、./migrations.json);在 project.json 加 release.version 与 nx-release-publish 配置,不手写 build-base.outputs,并验证推断输出含 {projectRoot}/dist/tsconfig.tsbuildinfo;更新 eslint ignores、assets.json、files 字段、README 重命名与 copy-readme 命令、根 .gitignore、docs 生成路径、scripts/nx-release.ts 的 packagesToReset 与路径、以及工作区内部 @nx/<name>/src/ 导入。可选步骤 14b 可收紧 ./src/* 通配,改为 ./internal 入口并保留运行时字符串解析的子路径。
适用场景:Nx 仓库维护者迁移包构建布局、统一发布与源码解析。
限制:需按包实际结构调整 include 与 files;@nx/nx-source 为工作区内自定义条件;部分步骤(如 14b)可选,需评估内部使用量;资料未提供具体版本、收费或平台信息。