#angular #eslint #eslintrc #angular11
#angular #eslint #eslintrc #angular11
Вопрос:
Я работаю в проекте Angular 11. Многие импорта в этом проекте используют относительный путь или абсолютный путь.
У меня есть настройка ESLint для этого проекта, я хочу запретить относительные пути импорта и разрешать только абсолютные пути. Но я не нахожу правила для этого.
Я нашел: no-relative-parent-imports , но это не вызывает у меня проблем с такими путями, как: import { HttpService } from "../http/http.service";
или import { RouterService } from "../../services/router/router.service";
(оба не являются абсолютными путями, абсолютными путями для них будут import { HttpService } from "app/services/http/http.service";
и import { RouterService } from "app/services/router/router.service";
соответственно.
Я прочитал эту статью: https://medium.com/@aayush123/escaping-relative-import-hell-react-native-eslint-atom-57dc2cae5bcc
Но я хочу избежать добавления еще одной вещи, подобной Babel, если смогу этого избежать.
Существует ли правило для ESLint для предотвращения любого типа относительных путей? Разрешить только абсолютные пути?
Ответ №1:
Вы можете добавить eslint-no-restricted-imports в свой .eslintrc
файл следующим образом:
"no-restricted-imports": ["error", {
"patterns": [".*"]
}],
Если есть некоторые файлы, в которых требуется относительный импорт, вы можете добавить переопределения eslint-config
следующим образом:
"overrides": [
{
"files": ["*-test.js"],
"rules": {
"no-restricted-imports": "off"
}
}
]
Комментарии:
1. Я хочу это правило, но мне также нужно, чтобы мое приложение работало. Это правило помогает выделить это как проблему:
import foo from './middleware/foo';
, и я могу это исправить и устранить ошибку linting и VSCode, удалив./
. Даже щелчок правой кнопкой мыши CMD открывает файл в IDE с не относительным путем! Но я должен запустить приложение и получить: Ошибка: не удается найти модуль ‘промежуточное программное обеспечение / foo’ Я пытался реализовать не относительные пути между другими задачами в течение 3 недель. Есть понимание? Я опубликовал вопрос, ответов нет. Чувствую, что я прочитал половину Интернета безрезультатно.2. @NeilGuyLindberg Я смог сделать это в приложении TypeScript CLI, следуя инструкциям здесь: bgxcode.com/posts/typescript/ts-absolute-import-paths . Теперь вместо
import foo from './middleware/foo';
этого у меня естьimport foo from '@app/middleware/foo';
where@app
— псевдоним для моего базового каталога src.3. Спасибо @adashrod. Я могу использовать этот метод. Однако я не понимаю, почему я могу сделать это в проекте JS без @app /, но мне нужно добавить это сюда? Как и в проекте JS, я могу просто:
middleware/foo
… и команда хочет того же.
Ответ №2:
Кто-то недавно создал новое правило ESLint специально для вашего варианта использования.
Он поддерживает исправление проблемы для вас и возможность разрешить родительские папки.
Ответ №3:
Вы можете попробовать мой новый плагин eslint-plugin-absolute-imports-only
...
settings: {
"absolute-imports-only": {
project: path.resolve(__dirname, 'tsconfig.json'),
},
},