Как лучше решить ситуацию с импортом файлов во время сборки проекта?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: перестал запускаться бэк с формулировкой не может найти/импортировать модульctx. Пути в файлеindexНужно понять: проверил, редактор находит файл и прописывает через автокомплит. Но через линк в терминале при выводе ошибки перехода на файл нет, то есть кто или что его не видит и почему и куда копать?

Сейчас ситуация такая: что удалось выяснить и почему я был уверен что ничего сам не менял:
По вводным: - видимо как то обновил самTSПо вводным: и теперь он ругается на параметрNodeВModuleResolutionСейчас ситуация такая:, что типа устарел он и не поддерживается. Но если мы его меняем наBandlerПо вводным:, то тогда идет несовместимость с системой модулейcommonjs
По вводным: - и в результате на данный момент приходится менять разные параметры для нормального запуска бэка и потом менять чтобы проверка типов проходила перед коммитом
Нужно понять: ну и что с этим всем делать? Как привести к общему согласию настроек?

По вводным: при запуске выводится следующее:

$ ▶ npm run dev > @ideanick/backend@0.0.0 dev > ts-node-dev --watch ./.env --rs --exit-child ./src/index.ts [INFO] 08:02:23 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.2, typescript ver. 5.7.3) Error: Cannot find module '/home/andrew/CODE/JS/React/IdeaNick/backend/src/lib/ctx' imported from /home/andrew/CODE/JS/React/IdeaNick/backend/src/index.ts at finalizeResolution (node:internal/modules/esm/resolve:274:11) at moduleResolve (node:internal/modules/esm/resolve:859:10) at defaultResolve (node:internal/modules/esm/resolve:983:11) at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12) at ModuleLoader.#cachedDefaultResolve (node:internal/modules/esm/loader:725:25) at ModuleLoader.#resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:760:38) at ModuleLoader.resolveSync (node:internal/modules/esm/loader:783:52) at ModuleLoader.#cachedResolveSync (node:internal/modules/esm/loader:744:25) at ModuleLoader.getModuleJobForRequire (node:internal/modules/esm/loader:462:50) at ModuleJobSync.#link (node:internal/modules/esm/module_job:440:34) [ERROR] 08:02:41 Error: Cannot find module '/home/andrew/CODE/JS/React/IdeaNick/backend/src/lib/ctx' imported from /home/andrew/CODE/JS/React/IdeaNick/backend/src/index.ts
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Если редактор видит импорт, а сборка/запуск Node.js не видит модуль ctx, значит у вас расходятся механизмы резолва: TypeScript/IDEA берёт пути из tsconfig, а runtime или bundler — из своих настроек. Автокомплит в редакторе ещё не доказывает, что Node, ts-node, webpack или vite смогут найти тот же путь.

Проверьте, как импорт выглядит в коде:

import { something } from 'ctx';

import { something } from 'ctx';

Если ctx — alias, он должен быть настроен не только в tsconfig.json, но и в инструменте сборки. Для TypeScript:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "ctx/*": ["src/ctx/*"]
    }
  }
}

{ "compilerOptions": { "baseUrl": ".", "paths": { "ctx/*": ["src/ctx/*"] } } }

Для Node напрямую такие aliases не работают. Нужен сборщик, tsconfig-paths или package exports. Для ts-node пример:

node -r ts-node/register -r tsconfig-paths/register src/index.ts

node -r ts-node/register -r tsconfig-paths/register src/index.ts

Если это монорепа или пакет, проверьте package.json: есть ли поле name, main, exports, собран ли пакет перед запуском.

Диагностика:

node -p "require.resolve('ctx')"
npm ls ctx
tsc --traceResolution

node -p "require.resolve('ctx')" npm ls ctx tsc --traceResolution

tsc --traceResolution покажет, куда TypeScript реально резолвит импорт. Если TypeScript находит, а Node нет — проблема на стороне runtime. Если TypeScript тоже не находит в CLI, значит IDE показывает устаревший индекс.

Итог: синхронизируйте aliases между tsconfig и сборщиком/runtime. Редактор может видеть файл через свои настройки, но Node не знает о paths, пока вы явно не подключили поддержку aliases.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно