簡體   English   中英

Typescript:在 Docker 容器中找不到模塊 XWZ 或其對應的類型聲明

[英]Typescript: Cannot find module XWZ or its corresponding type declarations in Docker Container

環境:Docker容器運行nodejs鏡像。

api 工作正常。 ts-node-dev 運行完美,express 或其他包沒有問題。 數據庫也在工作,我已經通過工作台對其進行了測試。

當我嘗試使用 ORM 連接到數據庫時出現的錯誤。 我嘗試了其中的兩個:TypeORM 和 Sequelize。 兩者都引發了相同類型的錯誤:

error TS2307: Cannot find module 'sequelize' or its corresponding type declarations.

不知道是Typescript編譯器的問題還是docker環境的問題。 因為這只發生在我通過docker-compose up運行容器內的應用程序時。

我注意到這兩個庫都使用庫內類型聲明,我的意思是,沒有 @types/sequelize

這是重現錯誤的存儲庫: https://bitbucket.org/carloseustaquio/test-cicd-docker/src/master/

Dockerfile

FROM node:12

RUN mkdir -p /home/node/api/node_modules && chown -R node:node /home

WORKDIR /home/node/api

COPY package.json yarn.* ./

USER node

RUN yarn

COPY --chown=node:node . .

EXPOSE 8080

ENTRYPOINT [ "./init.sh" ]

docker-compose.yaml

version: '3'

services:
  nodejs-app:
    container_name: nodejs-app
    build: '.'
    volumes:
      - .:/home/node/api
      - /home/node/api/node_modules
    networks:
      - app-connect
    ports:
      - '8080:8080'
    depends_on: 
      - database
    environment: 
      - DB_URI=mysql://root:password@database/db?charset=UTF8

  database:
    image: mysql:5.7
    environment: 
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=db
    ports: 
      - 0.0.0.0:7200:3306

networks:
  app-connect:
      driver: bridge

package.json

{
  "name": "test-docker",
  "version": "1.0.0",
  "description": "testing docker envairoment",
  "main": "index.js",
  "scripts": {
    "dev": "ts-node-dev --respawn --ignore-watch node_modules --no-notify index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "mysql2": "^2.1.0",
    "sequelize": "^6.3.5"
  },
  "devDependencies": {
    "@types/express": "^4.17.8",
    "@types/node": "12",
    "@types/validator": "^13.1.0",
    "ts-node-dev": "^1.0.0-pre.61",
    "typescript": "^4.0.2"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "moduleResolution": "node",
    "lib": [
      "es6"
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./src/@types",
    ],
    "allowJs": true,
    "outDir": "./dist",
    "rootDir": ".",
    "strict": true,
    "esModuleInterop": true,
    "noImplicitAny": false,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
  }
}

嘗試npm i @types/sequelize獲取模塊的類型或使用dts-gen生成聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM