Comments 12
Никогда не понимал чем людям мешают ../../../
Они же там вверху, никому не мешают. Да и сразу видно откуда ноги растут, не нужно смотреть еще куда то...
Столько телодвижений что бы это все запустить. А если поломается, кто чинить будет =))
Разве @/components/Header.jsx
не удобней чем ../../../../../Header.jsx
?
Я был приятно удивлён, когда увидел в первый раз @/
в NextJS, --но как-то стало грустно, что никто из сеньоров не имплементировал это чудо в нашей компании--.
Удобней чем? Хорошему IDE пофиг как это выглядит. Все что нужно мне как девелоперу, это возможность кликнуть и перейти в файл + автокомплит IDE который заимпортит файл и поставит правильный путь сам.
Заниматься настройкой всего это чуда и потенциальные проблемы с этим в будущем не стоят потраченного времени.
И я понимаю почему синьоры этим не занимались. Потому что есть более серьезные проблемы четь удобство путей к файликам. А еще синьеры понимают что если что-то поломается, они будут это чинить...
P.S.
Если когда нибудь это будет из коробки, это другой разговор.
Нельзя сходу определить откуда именно импортируется файл
Нельзя копипастить код между файлами, ибо сменился уровень вложености файла и надо править импорты
Сложнее линтить импорты
Благодарю, познавательно. Во всяком случае такие "алиасы" ещё не использовал, надо будет попробовать в тестовом режиме. В реальных проектах пока что не рискнул бы такое делать.
Спасибо огромное за статью! Всё получилось, но:
Как вы правильно отметили, в WebStorm существует проблема, которая решается добавлением алиаса в tsconfig.json
"paths": {
"#*": [
"*"
]
},
Но это приводит к проблемам, в случае использования монорепы с воркспейсами. Например, в воркспейсе @app/ui
есть файл shared/utils.ts
и в @app/main
есть аналогичный файл shared/utils.ts
Тогда при выполнении tsc
в @app/main
мы получаем ошибку:
Module '"#shared/utils"' has no exported member 'UIConfig'
В общем, проблемы из-за коллизий псевдонимов путей в двух воркспейсах. При удалении paths
из tsconfig.json
проблема пропадает, но автоимпорты и go to definition в IDE перестают работать корректно
TypeScript умеет изолировать алиасы на уровне пакета в монорепе, если настроить Project References. Из минусов – приходится дублировать монорепные зависимости и в package.json, и в tsconfig.json.
Я смотрел в эту сторону. Мы используем tsc
только для проверки типов (no-emit: true). Аналогично работе webpack-fork-ts-checker
или vite-plugin-checker
. К сожалению, project references не работают без физической сборки js/d.ts файлов
У нас все то же самое в проекте :)
Пришли к вот такому:
в редакторах кода сборка не требуется, language server собирает в памяти на лету
для tsc настроили outDir в
node_modules/.cache
. Проверка типов выполняется чуть дольше из-за записи файлов на диск, но не критично.еще могут возникнуть проблемы с typescript-eslint, из коробки он тоже требует сборку. Решается включением параметра EXPERIMENTAL_useProjectService.
Как упростить импорт JavaScript модулей с помощью Node.js Subpath Imports