You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在npm workspaces发布子包时强制依赖合规性检查?

解决方案

针对你用npm workspaces管理monorepo时,子包依赖缺失导致发布失败的问题,以下几种方法可以检测并阻止子包使用自身未声明的外部依赖,不需要依赖lerna:

1. 使用pkg-check工具

这是专为monorepo设计的依赖检查工具,能自动遍历子包,对比代码实际使用的依赖与子包package.json的声明:

  • 安装:npm install pkg-check --save-dev
  • 在根目录package.json添加脚本:
    "scripts": {
      "check-deps": "pkg-check packages/*"
    }
    
  • 运行检查:npm run check-deps
    子包中未声明的依赖会被直接列出,包含对应的文件位置。

2. 用dependency-check做精确扫描

该工具会扫描代码中的require/import语句,与当前包的package.json依赖做比对:

  • 安装:npm install dependency-check --save-dev
  • 在根目录package.json添加批量检查脚本:
    "scripts": {
      "check-package-1": "dependency-check packages/package-1/**/*.ts --missing",
      "check-package-2": "dependency-check packages/package-2/**/*.ts --missing",
      "check-all-packages": "npm run check-package-1 && npm run check-package-2"
    }
    
  • 运行后,子包中未声明的依赖会直接触发报错提示。

3. 用npm发布干运行提前验证

npm自带的publish --dry-run会模拟发布流程,包含依赖完整性检查:

  • 进入子包目录:cd packages/package-1
  • 运行干发布:npm publish --dry-run
    如果子包依赖缺失,npm会抛出类似Missing required dependencies: xxx的错误,及时提醒补全依赖。

4. 配置ESLint的import/no-extraneous-dependencies规则

放弃eslint-plugin-workspaces,改用eslint-plugin-import的核心规则实现检查:

  • 安装依赖:npm install eslint-plugin-import --save-dev
  • 在子包的.eslintrc.json(或根目录ESLint配置中针对子包做override)添加规则:
    {
      "rules": {
        "import/no-extraneous-dependencies": [
          "error",
          {
            "packageDir": "./"
          }
        ]
      }
    }
    

将packageDir设为子包自身目录后,ESLint会以子包的package.json为基准,检测到未声明的依赖时直接报错。

内容的提问来源于stack exchange,提问作者tdesero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:37