1

我在 yarn-workspaces monorepo 中有一个项目,包含前端、后端和常用包。全部在打字稿中。

构建和运行前端很好;它使用 webpack 创建一个dist/我可以部署的目录。后端应该更容易,因为它只是 typescript -> node.js。我可以tsc将生成的目录打包dist到我的 docker 映像中……除了node_modules依赖项。我怎样才能获得所需的依赖项dist?我不想要一个包含所有转译和花哨的东西的完整捆绑器。

有些人使用多阶段 docker 来创建构建(通过yarn install --production在新的 docker 构建映像中运行,因此它不是 monorepo 的一部分);这对我来说似乎有点矫枉过正,而且以这种方式进行调试似乎更难,因为您无法从开发机器上运行实际的构建。

我想要一个生成工作dist文件夹的工具,我可以用 docker 或任何其他方法打包该文件夹。有没有一种简单的方法可以做到这一点?

4

1 回答 1

1

您可以COPY在 Dockerfile 中添加任何您想要的内容。如果您的应用程序已经在您的主机上构建,那么您只需复制构建工件及其运行时依赖项即可。对于 Node 包,这可能看起来像

FROM node
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --production
COPY dist dist/
CMD ["node", "/app/dist/index.js"]

值得注意的是,yarn install --production避免复制文件"devDependencies"部分中的任何内容package.json,这会跳过tscwebpack.

(这种技术在编译语言中更为常见——尤其是 Java Dockerfiles 往往只是复制到构建.jar.war文件中——以及在多阶段构建之前的非常古老的 Docker 中。)

于 2019-12-07T11:04:22.810 回答