monorepo场景下eslint-plugin-import未正常触发依赖缺失报错如何解决?
问题原因
你遇到的情况是monorepo场景下eslint-plugin-import的默认配置不会区分不同子包的依赖声明,只要根目录node_modules下存在对应的包(因为app1声明了is-even依赖,安装后会提升到根目录node_modules),就不会抛出依赖未声明的报错。
解决配置步骤
- 确保你安装了v2.25.0及以上版本的
eslint-plugin-import,同时安装依赖解析器:
npm install eslint-import-resolver-node --save-dev # 如果是yarn/pnpm的workspace场景,推荐额外安装 # npm install eslint-import-resolver-workspaces --save-dev
- 修改项目根目录的ESLint配置文件,新增如下规则和解析配置:
{ "plugins": ["import"], "rules": { "import/no-extraneous-dependencies": [ "error", { // 指定需要检查依赖的目录:根目录 + 所有子包目录 "packageDir": [".", "./packages/*"] } ] }, "settings": { "import/resolver": { "node": { // 仅检查当前目录下的node_modules,禁止向上查找父级node_modules "moduleDirectory": ["node_modules"] } // 用workspaces解析器的话替换上面的node配置为: // "workspaces": {} } } }
- 重新运行ESLint校验,此时app2代码中引用
is-even的位置就会抛出依赖未声明的错误,完全符合你的校验需求。
补充说明
如果你的项目有不需要发布的测试子包、或者测试文件允许引用devDependencies的依赖,可以给import/no-extraneous-dependencies规则增加devDependencies: ['**/*.test.js', 'packages/test-pkg/**/*']这类例外配置,避免误报。
内容的提问来源于stack exchange,提问作者Colin D
相关产品推荐
相关产品推荐

