monorepo下TsLint提示shared模块未在package.json列依赖如何解决
解决方案
该报错由TsLint的no-implicit-dependencies规则触发,规则默认要求所有导入的模块必须在当前项目package.json的依赖项中声明,以下两种方案均不需要禁用整条规则:
方式1:给规则添加模块白名单(快速适配)
在project-1、project-2各自的tslint.json配置文件中,给no-implicit-dependencies规则添加shared到白名单配置即可:
{ "rules": { "no-implicit-dependencies": [ true, "dev", { "whitelist": ["shared"] } ] } }
配置后规则会跳过对shared模块的依赖校验,其余模块的校验逻辑仍然正常生效。
方式2:声明workspace依赖(符合monorepo最佳实践)
如果你的项目使用npm/yarn/pnpm的workspace能力管理monorepo,更推荐用这种原生符合规则的方案:
- 给
shared目录新增package.json文件,示例内容如下:
{ "name": "shared", "version": "0.0.1-local" }
- 在
project-1、project-2的package.json的依赖项中添加shared的声明:
{ "dependencies": { "shared": "workspace:*" } }
注:低版本包管理器不支持
workspace:协议时,可替换为相对路径写法"shared": "file:../shared"
该方案完全符合TsLint规则的校验逻辑,不需要修改Lint配置,同时后续做依赖安装、打包、发布等流程的兼容性更好。
内容的提问来源于stack exchange,提问作者Radu B
相关产品推荐
相关产品推荐

