使用 docker 和 docker compose 时访问打字稿中的节点模块

n9i*_*els 5 node.js typescript docker docker-compose

我正在尝试创建一个在开发过程中托管 NodeJS 项目的 docker 镜像。它只是使用 nodemon 执行 NodeJS 应用程序,因此每次我进行更改时它都会重新启动。

我还使用 TypeScript 来开发应用程序。TypeScript 必须有权访问已安装的@types模块。但是,应该显示node_modules文件夹的已安装卷是空的。所以 TypeScript 找不到模块,也无法编译。我的 IDE 也在抱怨(显然)

有没有办法让node_modulesTypeScript 可见?

这是我的 Dockerfile:

FROM node:alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json .

RUN npm install

# Bundle app source
COPY . .

# Run app
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose.yml:

version: "3"

services:
  server:
    build: .
    environment:
      - NODE_ENV=development
    command: npm run debug
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - "8080:8080"
      - "9229:9229"
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 1

您应该为您使用单独的文件夹node_modules,然后在NODE_PATH环境中设置该文件夹

FROM node:alpine

# Create app directory
ENV NODE_PATH /usr/node_modules
WORKDIR /usr/node_modules

# Install app dependencies
COPY package.json .

RUN npm install

WORKDIR /usr/src/app

# Bundle app source
COPY . .

# Run app
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

这样你的代码将是独立的,并且node_modules图像本身将存在。每当您添加新模块时,您都将重建映像,否则开发可以在安装的卷上顺利进行