node.js - 使用 docker 和 docker compose 访问 typescript 中的 Node 模块

标签 node.js typescript docker docker-compose

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

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

有没有办法让 node_modules 对 TypeScript 可见?

这是我的 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" ]

这是我的 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"

最佳答案

您应该为您的 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" ]

这样您的代码将是独立的,node_modules 将在图像本身中存在。任何时候你添加一个新模块你都将重建图像,否则开发可以在安装的卷上正常进行

关于node.js - 使用 docker 和 docker compose 访问 typescript 中的 Node 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45739252/

相关文章:

node.js - VS Code 的 Intellisense 不建议 Node.js 中的 Sequelize 对象的任何功能?

javascript - 带有 sourceComments : 'map' produces 'Assertion failed' 的 gulp 中的 SASS 任务

javascript - React useScroll hook 中的 Typescript 错误 : Cannot invoke an expression whose type lacks a call signature

javascript - 与 useEffect 一起使用时,自定义钩子(Hook)会被无限调用

docker - 如何通知应用程序有关 kubernetes 中更新的配置文件?

node.js - 如何在 docker 中快速故障转移 nginx 上游容器(蓝/绿部署)

javascript - Lodash sortBy 以随机顺序返回元素(未排序)

javascript - 如何使用 npm 库提供异步集成测试?

javascript - IndexedDB 读取在写入完成之前完成

postgresql - Docker 容器在启动 Postgres DB 后立即停止