Не удается найти модуль ‘@nestjs / typeorm’

#node.js #docker #npm #nestjs #typeorm

#node.js #docker #npm #nestjs #typeorm

Вопрос:

Я установил TypeORM с помощью следующей команды:

Репозиторий Github

 npm i --save @nestjs/typeorm typeorm

up to date, audited 855 packages in 3s

86 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  

но когда я хочу использовать @nestjs/typeorm , он говорит «модуль не найден».

main.ts :

 import 'dotenv/config';
import {Logger} from '@nestjs/common';
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';

import {TypeOrm} from '@nestjs/typeorm';

const port = process.env.PORT || 3000;

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    await app.listen(port);
    Logger.log(`server started on ${port}`, 'Bootstrap');

}

bootstrap();
  

ошибка:

 error TS2307: Cannot find module '@nestjs/typeorm' or its corresponding type declarations.
  

Вот мой файл «package.json»:

 {
  "name": "---",
  "version": "0.0.1",
  "description": "",
  "author": "---",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "prebuild": "rimraf dist",
    "build": "nest build",
    "format": "prettier --write "src/**/*.ts" "test/**/*.ts"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint "{src,apps,libs,test}/**/*.ts" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^8.0.0",
    "@nestjs/config": "^1.0.1",
    "@nestjs/core": "^8.0.0",
    "@nestjs/platform-express": "^8.0.0",
    "@nestjs/platform-socket.io": "^8.0.6",
    "@nestjs/typeorm": "^8.0.2",
    "dotenv": "^10.0.0",
    "g": "^2.0.1",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^3.0.2",
    "rxjs": "^7.2.0",
    "typeorm": "^0.2.36"
  },
  "devDependencies": {
    "@nestjs/cli": "^8.0.0",
    "@nestjs/schematics": "^8.0.0",
    "@nestjs/testing": "^8.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "^26.0.24",
    "@types/node": "^16.0.0",
    "@types/supertest": "^2.0.11",

    ...
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\.spec\.ts$",
    "transform": {
      "^. \.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}
  

я не уверен Docker , что причина возникновения этой ошибки ошибка

Dockerfile :

 FROM node:12.19.0-alpine3.9 AS development

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install glob rimraf

RUN npm install --only=development

COPY . .

RUN npm run build

FROM node:12.19.0-alpine3.9 as production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=production

COPY . .

COPY --from=development /usr/src/app/dist ./dist

CMD ["node", "dist/main"]
  

и docker-compose.yml :

 version: '3.8'

services:
    dev:
        container_name: nestjs_api_dev
        image: nestjs-api-dev:1.0.0
        build:
            context: .
            target: development
            dockerfile: ./Dockerfile
        command: npm run start:debug
        ports:
            - 3000:3000
            - 9229:9229
        networks:
            - nesjs-network
        volumes:
            - .:/usr/src/app
            - /usr/src/app/node_modules
        restart: unless-stopped
    prod:
        container_name: nestjs_api_prod
        image: nestjs-api-prod:1.0.0
        build:
            context: .
            target: production
            dockerfile: ./Dockerfile
        command: npm run start:prod
        ports:
            - 3000:3000
            - 9229:9229
        networks:
            - nesjs-network
        volumes:
            - .:/usr/src/app
            - /usr/src/app/node_modules
        restart: unless-stopped

networks:
    nesjs-network:
  

Комментарии:

1. Не уверен, что это поможет. Я сравнил ваши файлы с моими, кажется, вам нужно установить @nestjs /config вместо nestjs-config;

2. Почему вы устанавливаете только зависимости разработки на DEVELOPMENT этапе вашего контейнера docker?

3. Возможно, первым шагом, который поможет, является воспроизведение в локальной среде, чтобы исключить возможность того, что среда docker вызвала это

4. @xiao ты прав, ты можешь проверить этот репозиторий на GitHub github.com/pishguy/nest-sample

Ответ №1:

В приведенном выше Dockerfile и в примере, предоставленном DolDurma, во время development шага устанавливаются только зависимости разработки. Это означает, что когда typescript пытается найти такие вещи, как @nestjs/typeorm , @nestjs/common и @nestjs/core , наряду с любыми другими пакетами, которые требуются для запуска сборки и запуска приложения, он не может, поэтому выдает ошибку о невозможности найти пакет или объявления его типа. Самое простое решение находится в строке 9 файла Dockerfile для перехода с RUN npm install --only=development на RUN npm install . При этом будут установлены все зависимости, и контейнер docker сможет правильно собраться. Тогда docker compose up будет работать (экземпляры выше не будут запускаться, потому что оба привязаны к порту 3000, но вы можете это сделать docker compose up dev , и все должно быть хорошо)

Похоже, что в примере для DolDurma все еще необходимо установить некоторые дополнительные зависимости, но контейнер создает и пытается начать с вышеуказанной модификации