SuperAPI AI 工具集

package-manager-ops

部署与运维

查看项目

更新于 10-15 11:18

技能介绍

Package Manager Operations 是一套关于 JavaScript 与 PHP 包管理器日常操作与排障的技能,聚焦 npm、Yarn、pnpm、Bun 和 Composer 在真实项目中的使用方式。其背景是服务端渲染站点(Craft CMS、Laravel、WordPress)在 DDEV 中配合 Vite 或 Laravel Mix 构建时经常出现的错误:两份 lockfile、未固定的 Node、缺少 require.php、已停止维护的 PHP 版本、以及在 README 中使用 npx 等。

用途

技能用于回答和排查以下问题:一个仓库到底使用哪个包管理器;开发、CI 与部署各自应执行哪条安装命令;如何固定 Node 与 PHP 版本,使每台机器结果一致;如何在不下载陌生人代码的前提下运行包;以及如何从旧工具(Bower、node-sass、Yarn 1、旧版 Node/PHP)有计划地迁移出来。

主要能力

  • 判断仓库使用的包管理器,处理两份 lockfile 的取舍(保留部署使用的那份,删除另一份并说明原因后重新安装并提交)。
  • 明确安装语义:CI 与部署使用冻结式安装(npm ci、composer install 等),开发机可使用会改动 lockfile 的安装命令;部署钩子中不应出现 npm install 或 composer update。
  • 版本固定:Node 使用 .nvmrc、engines.node 配合 .npmrc 中的 engine-strict=true(pnpm 为 pnpm-workspace.yaml 中的 engineStrict)、DDEV 的 nodejs_version;PHP 使用 require.php、config.platform.php 与 DDEV php_version,且彼此一致。
  • 切换管理器时通过导入 lockfile(pnpm import、npm 读取 yarn.lock、Yarn 4 迁移 v1 lock)而不是删除 lockfile。
  • npx 执行安全:package.json scripts 中不使用 npx,其他位置使用精确版本固定;原生 CLI(rg、fd、sd、jq)不通过 npx 运行。
  • 凭证管理:提交的 .npmrc/.yarnrc.yml 仅保存环境引用(如 ${NPM_TOKEN}),Composer 使用全局 auth.json 或 COMPOSER_AUTH;注意 pnpm 11.5.3+ 会忽略项目 .npmrc 中的该占位符。
  • 升级策略:按运行时、管理器、构建工具、框架、叶子库逐层进行,一次提交只升一个大版本。
  • 提供只读审计脚本 pm-audit,扫描一个仓库根目录,报告冲突 lockfile、lockfile 与 manifest 不一致、Node/PHP 固定缺失或互相冲突或指向已停止维护的版本、scripts/文档/CI 中未固定版本的 npx/dlx、经由 npx 的原生 CLI、Bower 与 node-sass、提交的注册表凭证(按文件与行号报告,不输出值)、pnpm 忽略的 .npmrc 占位符;并从 CI 配置、Dockerfile 和 appspec 钩子脚本中报告非冻结安装、npm 上的 Yarn 标志、未固定版本的全局安装、未加 --no-dev 的部署、Composer 1、以及写入 Docker 构建上下文的凭证。脚本会跟踪 CI 构建进入其运行所在的子目录,并列出嵌套的包根目录。
  • 提供多仓库扫描方式(只读稀疏克隆、部署分支等)。

使用方式

pm-audit 以相对技能目录的路径运行,在 Claude Code 中使用 ${CLAUDE_SKILL_DIR}/scripts/...:

bash scripts/run-python.sh scripts/pm-audit.py path/to/repo bash scripts/run-python.sh scripts/pm-audit.py --json path/to/repo | jq -r '.data[] | "(.id)\t(.file)"' bash scripts/run-python.sh scripts/pm-audit.py --no-docs --as-of 2027-01-01 path/to/repo

退出码:0 表示干净,10 表示有发现,2 表示用法错误,3 表示路径不存在。默认输出为每行一条 TSV 记录:severity、id、file、message、fix;提示性说明写入 stderr。--as-of 用于移动停止维护的时间线;--no-docs 跳过对文档的 npx 扫描,但 package.json scripts 与 CI、部署检查仍会运行。脚本会审计根 manifest,对其列出的每个嵌套根需再运行一次。run-python.sh 会依次尝试 python3、python、py,跳过 Windows Store 的 python3 占位程序。

适用场景

适合在服务端渲染站点与 DDEV 项目中管理依赖、配置 CI/部署安装命令、统一 Node 与 PHP 版本、排查 ERESOLVE、EINTEGRITY、重复依赖、lockfile 合并冲突与“在我机器上能跑”类问题,以及规划从旧工具退出。

限制与边界

该技能负责运行构建脚本与日常依赖使用,不负责配置 bundler;不判断某个包是否安全(依赖安全、安装钩子策略归 supply-chain-defense),不做漏洞分级(归 security-ops),不配置 Mix/Webpack/Vite 及迁移(归 frontend-upgrade-ops),不涉及 JavaScript 语言与 Node 运行时模式、TypeScript 配置、容器镜像与多阶段安装层、DDEV 自身配置、Craft CMS 本身以及 CI 流水线设计与 action 固定。DDEV 自身的 .ddev/ 配置由其对应审计器检查,pm-audit 只核对 DDEV 是否一致。

事实与版本

技能内事实核对于 2026-10-06,来源包括 docs.npmjs.com、yarnpkg.com、pnpm.io、bun.com、getcomposer.org(对照 2.10.3 标签)、nodejs.org、php.net 与 docs.ddev.com。当时的主要版本为 npm 12、pnpm 12、Yarn 4、Composer 2(2.10.3)、Bun 1。对于对版本敏感的答案,应读取 assets/package-manager-facts.json 并在日期过期后重新核对上游;维护方式记录在 version-pinning.md。两条近期变化会打破旧习惯:Corepack 自 Node 25.0.0 起不再随 Node 发布;npm 12、pnpm 10+、Yarn 4.14+ 与 Bun(在其内置受信列表之外)默认阻止依赖安装脚本。其他具体功能、收费、价格与平台信息暂未提供。