Исправьте ошибку «модуль не найден» раз и навсегда.
Вы когда-нибудь получали Nest can’t resolve dependencies
ошибки при выполнении тестов в Nest.js?
Когда вы создаете проект с помощью интерфейса командной строки Nest, ваш tsconfig.json
будет выглядеть примерно так:
{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es2017", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", "incremental": true, "skipLibCheck": true } }
Проблема с этой конфигурацией заключается в том, что в Visual Studio Code, когда вы используете автоматический импорт, он будет генерировать относительный путь, начиная с папки src/
.
При выполнении тестов с помощью Nest.js (используя Jest ниже) вы часто будете получать ошибки, указывающие на то, что Nest не может разрешить (существующие) модули.
Решение заключается в использовании относительного пути из текущего файла, в который импортируются модули. Например:
// instead of import { UserService } for 'src/services/user.service'; // use import { UserService } for '../service/user.service';
Теперь Nest.js сможет находить модули при запуске тестов.
Чтобы избежать получения путей импорта, начинающихся с src/
, при автоматическом импорте в код vs, просто измените tsconfig.json
:
{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es2017", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", <<===== remove this line "incremental": true, "skipLibCheck": true } }
А также не забудьте установить для свойства strict
значение true
на всякий случай:
{ ... "strict": true }
Дополнительные материалы на plainenglish.io