Tengo mi proyecto express.js en monorepo. Quiero agregarle un alias de ruta personalizado. La estructura del directorio es:
./ server/ ----> jsconfig.json ----> .eslintrc.js ----> src/ --------> index.js --------> modules/auth -------------> auth.controller.jsjsconfig.json
{ "compilerOptions": { "module": "ES6", "baseUrl": "./", "paths": { "@modules/*": [ "src/modules/*" ] } }, "exclude": ["node_modules"] }.eslintrc.js
module.exports = { 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'], }, }, }, };Simplemente, intenté importar el controlador de autenticación en mi archivo index.js.
import authRoutes from '@modules/auth/auth.routes'; pero aparece el siguiente error: Unable to resolve path to module '@modules/auth/auth.controller' .eslint import/no-unresolved
por favor, no sugiera desactivar la regla. Ya probé eslint-import-resolver-jsconfig , pero obtuve Cannot resolve jsConfig, SyntaxError } on 150 .
Debido a que usé monorepo, hubo un problema con ESLint o incluso con pelusa. Entonces ahora solo tengo un proyecto por repositorio y:
jsconfig.json : "paths": { "@modules/*": [ "./src/modules/*" ] }eslint-import-resolver-jsconfig y agregué la siguiente configuración a eslint.json : "extends": [ "airbnb-base", "eslint:recommended" ], "plugins": ["import"], "settings": { "import/resolver": { "jsconfig": { "config": "jsconfig.json" } } }babel-plugin-module-resolver y agregué la siguiente configuración a .babelrc : "plugins": [ [ "module-resolver", { "alias": { "@modules": "./src/modules" } } ] ] Pero, de nuevo: esto solo funciona si tiene un proyecto por repositorio y todos sus archivos de configuración ( .*rc , package.json , etc.) están en el nivel raíz.
Para lograr lo anterior, uso el paquete module-alias .
Después de instalarlo como una dependencia normal, npm i --save module-alias , agregue lo siguiente a su package.json :
"_moduleAliases": { "@modules": "./src/modules" }Básicamente, eso definirá las asignaciones para todos los alias que desee definir.
Para que funcione, ahora deberá importar lo siguiente en la parte superior de su aplicación en index.js :
require("module-alias/register"); // If using commonJS // or import "module-alias/register"; // If transpiling es6Ya está todo listo y debería poder importar sus archivos con rutas absolutas como:
const authRoutes = require("@modules/auth/auth.routes") // or import authRoutes from "@modules/auth/auth.routes"; En caso de que eslint aún marque la ruta sin resolver, es posible que deba actualizar su jsconfig.json o tsconfig.json para que contenga lo siguiente:
"paths": { "@modules/*": ["src/modules/*"] }Puede encontrar la documentación del paquete y leer más sobre su uso aquí .