在 Docker 中构建 TypeScript 时未生成 dist 文件夹

dist folder not generated when building typescript in docker

提问人:Codelate 提问时间:11/14/2023 更新时间:11/14/2023 访问量:45

问:

我正在处理一个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"]

我曾多次尝试重建容器,但同样,它只会在我本地运行构建命令时进行编译,并且不会因更改而更新。

节点.js docker docker-compose 微服务

评论

0赞 Kevin Kopf 11/14/2023
为什么要使用多个相同的图像?FROM
0赞 David Maze 11/14/2023
Docker 不是实时开发环境的好工具,因为它的核心模型是围绕与主机文件系统隔离的不可变映像。在您的案例中,最终映像只有构建的生产应用程序,而没有原始源。在这个用例中,您可以在没有 Docker 的情况下使用 Node 吗?
0赞 Codelate 11/15/2023
@Kevin Kopf,这是一个多阶段的构建

答:

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 文件夹。有什么想法吗?