#typescript #visual-studio-code #next.js #nrwl-nx
#typescript #visual-studio-code #next.js #nrwl-nx
Вопрос:
Я столкнулся с проблемой Next.js проект, загруженный с помощью nx и VS Code:
Когда я пытаюсь автоматически импортировать компонент с помощью VS Code, он генерирует абсолютный импорт, который немедленно запускает @nrwl/nx/enforce-module-boundaries
правило eslint, делая текущий файл недействительным.
Например, со структурой папок:
apps/my-app/
pages/
entity/
new/
index.tsx
components/
Loading.tsx
Сгенерированный импорт будет:
// in my-app/pages/entity/new/index.tsx
import Loading from 'apps/my-app/components/Loading'
Хотя я ожидаю:
import Loading from '../../../components/Loading'
В VS Code есть настройка, позволяющая всегда использовать относительные пути для импорта, но это помешает мне импортировать библиотеки надлежащим образом ( @scope/lib
).
Есть ли какие-либо возможные настройки, которые могут заставить автоматический импорт работать должным образом?
Комментарии:
1. Настройка автоматического импорта VS codes обычно определяет, что такое библиотека, и оставляет ее в качестве простого спецификатора. Иногда это становится очень запутанным, хотя
Ответ №1:
Вы можете настроить paths
свойство в tsconfig.base.json
файле в корне вашего проекта. Если вы добавите его в другие файлы tsconfig, он не будет работать, правильным будет tsconfig.base.json
файл в корне вашего проекта.
Исходя из вашего примера, вы можете добавить следующее к paths
опции.
"@my-app/*": ["apps/my-app/*"]
Теперь вы можете перейти ../../../components/Loading
на @my-app/components/Loading
.
Более подробный пример (примечание: я удалил кучу других параметров, которые должны быть в вашем tsconfig.base.json
файле для удобства чтения)
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@my-app/*": [
"apps/my-app/*"
]
}
}
Источник и дополнительная информация в официальном руководстве TS: https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping
Комментарии:
1. Я не понимаю, почему это не работает, если переопределить пути к tsconfig в библиотеках или папках приложений, я думал, что baseUrl по-прежнему должен быть корневой папкой. Хотя я могу добавить псевдонимы путей в tsconfig.base, но я получил
Projects should use relative imports to import from other files within the same project. Use "./path/to/file" instead of import from
ошибку eslint2. Это приведет к запуску
nx
правила eslint, как следует из другого комментария. На данный момент, похоже, для этого нет подходящего рабочего процесса, кроме использованияbaseUrl: '.'
вtsconfig.spec.json
и дублирования путей в базовом tsconfig