monorepo中Express.js项目Eslint无法识别jsconfig路径别名如何解决
解决方案
1. 修复ESLint别名配置错误
你当前使用的eslint-import-resolver-alias插件配置规则不支持通配符*,首先修改.eslintrc.js配置:
// .eslintrc.js 新增root字段避免monorepo上层ESLint配置干扰 module.exports = { root: true, // 新增该行 env: { es2021: true, node: true, }, extends: [ 'airbnb-base', ], parserOptions: { ecmaVersion: 12, sourceType: 'module', }, rules: { 'no-console': 'error', 'no-debugger': 'error', }, settings: { 'import/resolver': { alias: { map: [ // 去掉通配符*,直接写别名前缀和对应相对路径 ['@modules', './src/modules'], ], extensions: ['.js', '.json'], }, }, }, };
修改完成后重启编辑器的ESLint服务,即可解决import/no-unresolved校验报错。
额外检查:你给出的目录结构里
src/modules/auth下只有auth.controller.js,如果没有手动创建auth.routes.js文件也会触发该报错,确认对应文件存在即可。
2. 解决eslint-import-resolver-jsconfig的SyntaxError报错
该报错是因为jsconfig.json存在JSON语法错误,JSON标准不允许尾逗号,打开jsconfig.json找到第150行附近,删除多余的逗号即可。如果确认语法无误,还可以明确指定jsconfig的路径来避免monorepo路径识别问题:
settings: { 'import/resolver': { jsconfig: { config: './jsconfig.json', // 填写相对于.eslintrc.js的配置路径 }, }, }
3. 配置运行时路径别名(必做)
Node原生不识别自定义路径别名,ESLint校验通过后运行项目仍会报错,需要根据你使用的模块规范做对应配置:
- 若使用CommonJS规范:安装
module-alias包,在项目入口文件最顶部引入require('module-alias/register'),同时在package.json新增配置:"_moduleAliases": { "@modules": "src/modules" } - 若使用ESM规范:在package.json新增
imports配置即可:
注意Node原生ESM规范要求别名前缀必须为"imports": { "#modules/*": "./src/modules/*" }#,如果要保留@前缀需要配合es-module-alias等loader使用。
内容的提问来源于stack exchange,提问作者natikos
相关产品推荐
相关产品推荐

