我正在尝试创建一个在开发期间托管 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/