Автоматический импорт в vscode, предлагающий только абсолютный путь с подпакетами lerna в TypeScript
По какой-то причине совсем недавно мой vs-код изменился и начал предлагать только абсолютные импорты из уровня подпакетов с моими пакетами Lerna, например:
Как вы можете видеть, автоматический импорт предлагает @package/server/src/database
путь к файлу, когда он должен быть ../database
так как редактируемый файл находится в том же пакете и находится всего в одной папке под файлом, содержащим переменную базы данных, которую я пытаюсь использовать.
Это ошибка или проблема конфигурации?
Я установил свой Import Module Specifier
установка для TypeScript в vs-code всех трех параметров (авто, относительный и абсолютный), и ни один из них, кажется, не имеет никакого значения.
5 ответов
На VScode File> Настройки> Настройки> Настройки пользователя
"typescript.preferences.importModuleSpecifier": "относительный"
У меня отлично работает. Это импорт
import { RegistrationComponent } from '../../abc-modules/registration/registration.component';
на месте
import { RegistrationComponent } from 'app/abc-modules/registration/registration.component';
В коде Visual Studio меню «Файл» → «Настройки» → «Настройки» → «Настройки пользователя».
поиск по importModuleSpecifier
Моя проблема заключалась в том, что у меня былbaseUrl
опция установлена в моемtsconfig.json
файл.
{
"compilerOptions": {
"baseUrl": ".", // remove
},
}
После удаления опции; VSCode сразу начал импорт по относительному пути. Преимущество этого метода в том, что вы можете сохранить опцию VSCode.importModuleSpecifier
установлен вshortest
и импорт относительного пути по-прежнему будет работать.
Я попал сюда из Google и столкнулся с противоположной проблемой. Мой экземпляр Visual Studio Code всегда импортировал относительный путь, даже если он был из другого пакета Lerna.
Оказывается, я просто забыл добавить пакет, который он ошибочно импортировал, в мой потребительский пакет. package.json
файл.
Теперь все работает как положено.
Возможно, вам понадобится комбинацияbaseUrl
иpaths
.
tsconfig.json
"compilerOptions": {
"baseUrl": "./",
"paths": {
"holograph/src/*": ["src/*"]
},
}
Настройки VSCode
"typescript.preferences.importModuleSpecifier": "non-relative" // or "shortest"
Мои папки такие. Когда я вapps/app
, я могу автоматически импортировать в VSCode из пакетов сfrom 'holograph/src/ui/...'
. Но когда я вpackages/holograph
компоненты пользовательского интерфейса, по причине, которую я еще не обнаружил, они автоматически импортируются изsrc/ui
, что приводит к ошибке сборки. Мне пришлось вручную импортировать из пути к пакетуhologrpah/src/ui
. Выполнение вышеуказанных путей импорта переназначает исправленный автоматический импорт VSCode.
node_modules
apps (next.js applications)
├── app
| └── pages
├── operator
├── storybook
packages (shared components & libraries)
├── holograph
| └── src
| └── ui
├── tsconfig
├── eslint-config-holograph
...
PS: Это тоже сработало, но я не уверен, насколько это действительно. По сути, установка baseUrl на одну папку вверх. ♂️
"compilerOptions": {
"baseUrl": "../",
},
}