license-manager插件通过vscode原生集成实现快速精准许可证检查,仅解析package.json和license文件,跳过node_modules和dev依赖,支持monorepo独立扫描、spdx数据库回退查询及license-overrides.json手动覆盖。

直接用 license-manager 插件 + .vscode/settings.json 配置就能跑起来,不需要全局安装 CLI 工具或改项目 package.json。
为什么不用 npm audit 或 license-checker
这些命令行工具会扫描整个 node_modules,耗时长、易误报(比如把 MIT 的子依赖识别成 GPL),且无法和编辑器保存动作联动。而 license-manager 是 VSCode 原生插件,只解析 package.json 和各包的 license 字段(或 LICENSE 文件),跳过构建产物和 dev-only 依赖,响应快、结果准。
- 它不执行
npm install,也不读取node_modules目录下的实际文件 - 对 workspace 内多个子项目(如 monorepo)各自独立扫描,互不干扰
- 遇到未声明 license 的包,会 fallback 到 SPDX 官方数据库查证,不是简单标为 “UNKNOWN”
配置 license-manager.allowedLicenses 的关键点
这个数组不是“白名单过滤”,而是“匹配即放行”。VSCode 会逐个比对每个依赖的 license 字符串是否与数组中任一值完全一致(大小写敏感),或符合 SPDX 表达式语法(如 MIT OR Apache-2.0)。
-
"CC0-1.0"和"CC0"不等价,必须写全称 -
"(MIT OR BSD-2-Clause)"这种带括号的表达式需用字符串整体传入,不能拆成两个元素 - 若允许宽松型协议(如 MIT、Apache-2.0),但禁止 copyleft 类(如 GPL-3.0),就不要写
"*"或"all"—— 插件不支持通配符 - 医疗类项目建议显式加入
"BSL-1.1"(如某些 FHIR 工具库使用),避免被误判为非合规
常见误报场景与绕过方式
有些包在 package.json 里写的是 "SEE LICENSE IN LICENSE",license-manager 默认不自动读取该文件内容,会标黄警告。这时不能删掉该依赖,而应手动补全:
- 在工作区根目录建
.vscode/license-overrides.json,写:{ "lodash": "MIT", "fhir-kit-client": "Apache-2.0" } - 重启 VSCode 或执行命令面板指令:
License Manager: Reload License Overrides - 注意:覆盖只作用于当前 workspace,不影响其他项目
- 如果某依赖是内部私有包(无 public license 字段),可在
settings.json中加:"license-manager.ignorePackages": ["@myorg/internal-utils"]
真正容易被忽略的是多层嵌套依赖的 license 传递性 —— license-manager 只校验直接依赖的 license 字段,不会递归检查其子依赖。如果你的项目要过 FDA 审计,必须额外用 npm ls --depth=5 --all 手动抽查关键路径上的 license 声明是否一致。











