提问人:Codelate 提问时间:11/14/2023 更新时间:11/14/2023 访问量:45
在 Docker 中构建 TypeScript 时未生成 dist 文件夹
dist folder not generated when building typescript in docker
问:
我正在处理一个nodejs微服务项目,并尝试在docker容器中构建服务。问题是我看不到生成的dist文件夹。但是当我在本地运行 npm start 或 npm run build 时,每个服务都会被构建并生成 dist 文件夹。我想使用 和 进行构建,以便可以实时编译我的更改。我附加了来自 package.json 和 Dockerfile 的脚本,以便在其中一项服务上进行审查。谢谢。docker build -t container-name .
docker-compose
"scripts": {
"start": "npm run build && node dist/index.js",
"dev": "NODE_ENV=dev ts-node-dev --poll src/index.ts",
"build": "rimraf ./dist && rimraf tsconfig.tsbuildinfo && tsc",
"start_mongo": "brew services start mongodb/brew/mongodb-community",
"stop_mongo": "brew services stop mongodb/brew/mongodb-community",
"start_rabbit": "brew services start rabbitmq",
"test": "echo \"Error: no test specified\" && exit 1"
}
Docker文件
FROM node:20-alpine as development
WORKDIR /app/user_service
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build
FROM node:20-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /app/user_service
COPY package*.json .
RUN npm ci --only=production
COPY --from=development /app/user_service/dist ./dist
EXPOSE 8001
CMD ["node", "dist/index.js"]
我曾多次尝试重建容器,但同样,它只会在我本地运行构建命令时进行编译,并且不会因更改而更新。
答:
1赞
Hugo Sangaletti
11/14/2023
#1
您的命令缺少目标路径和源路径的最终路径COPY
/
COPY --from=development /app/user_service/dist/ ./dist/
鉴于两者都是文件夹而不是文件,它们必须以 结尾,如 Docker 文档中所述:/
COPY <src> <dest>
- 如果是任何其他类型的文件,则会单独复制 及其元数据。在本例中,如果以尾随结尾 斜杠,它将被视为一个目录,其内容将写在 。
<src>
<dest>
/
<src>
<dest>/base(<src>)
- 如果直接指定了多个资源,或者由于使用了通配符,则必须是一个目录,并且必须以斜杠结尾。
<src>
<dest>
/
- 如果不以尾部斜杠结尾,则将被视为 常规文件和 的内容将写入 。
<dest>
<src>
<dest>
- 如果不存在,则与所有缺失的一起创建 目录。
<dest>
评论
0赞
Codelate
11/15/2023
谢谢@Hugo Sangaletti。我现在已经更新了它,但仍然没有解决我的问题。仍未看到正在生成 dist 文件夹。有什么想法吗?
评论
FROM