gpt4 book ai didi

node.js - 使用 docker 构建的 Yarn 工作区

转载 作者:行者123 更新时间:2023-12-03 20:38:54 26 4
gpt4 key购买 nike

考虑以下 yarn 工作区的文件结构:

.
├── docker-compose.yaml
├── package.json
├── packages
│   └── pkg-1
│   ├── dist
│   ├── package.json
│   ├── src
│   └── tsconfig.json
├── services
│   ├── api-1
│   │   ├── dist
│   │   ├── Dockerfile
│   │   ├── package.json
│   │   ├── src
│   │   ├── tsconfig.json
│   │   └── yarn.lock
│   └── client-1
│   ├── package.json
│   ├── src
│   └── yarn.lock
├── tsconfig.json
└── yarn.lock
我已经编写了 Dockerfile 来为 api-1 创建图像:
ARG APP_DIR=/usr/app

# Build stage
FROM node:16.2-alpine AS build

ARG APP_DIR

WORKDIR ${APP_DIR}
COPY package.json ./
COPY yarn.lock ./
COPY tsconfig.json ./

WORKDIR ${APP_DIR}/packages/pkg-1
COPY packages/pkg-1/package.json ./
RUN yarn --pure-lockfile --non-interactive
COPY packages/pkg-1/tsconfig.json ./
COPY packages/pkg-1/src/ ./src
RUN yarn build

WORKDIR ${APP_DIR}/services/api-1
COPY services/api-1/package.json ./
COPY services/api-1/yarn.lock ./
RUN yarn --pure-lockfile --non-interactive
COPY services/api-1/tsconfig.json ./
COPY services/api-1/src/ ./src
RUN yarn build

# Production stage
FROM node:16.2-alpine AS prod

ARG APP_DIR

WORKDIR ${APP_DIR}
COPY --from=build ${APP_DIR}/package.json ./
COPY --from=build ${APP_DIR}/yarn.lock ./

WORKDIR ${APP_DIR}/packages/pkg-1
COPY --from=build ${APP_DIR}/packages/pkg-1/package.json ./
RUN yarn --pure-lockfile --non-interactive --production
COPY --from=build ${APP_DIR}/packages/pkg-1/dist ./dist

WORKDIR ${APP_DIR}/services/api-1
COPY --from=build ${APP_DIR}/services/api-1/package.json ./
COPY --from=build ${APP_DIR}/services/api-1/yarn.lock ./
RUN yarn --pure-lockfile --non-interactive --production
COPY --from=build ${APP_DIR}/services/api-1/dist ./dist

CMD ["node", "dist"]
构建从根 docker-compose.yaml 运行以获得适当的上下文:
services:
api-1:
image: project/api-1
container_name: api-1
build:
context: ./
dockerfile: ./services/api-1/Dockerfile
target: prod
ports:
- 3000:3000
它正在工作,但是这样在应用程序增长时会有很多重复。问题是包的构建方式。
包可以是例如在客户端服务中使用的规范化组件集合或在 api 服务中使用的规范化错误集合。
每当我要构建一些服务时,我首先需要构建它的依赖包,这是不必要的重复任务。更不用说在使用该包的每个服务的 Dockerfile 中一遍又一遍地定义各个包的构建步骤。
所以我的问题是。有没有办法创建例如将用于构建服务的包图像,以避免在服务 Dockerfile 中定义包的构建步骤?

最佳答案

似乎您正在寻找可以让您选择拥有“父”package.json 的东西,因此您只需在其中调用“build”,然后构建整个依赖树。
例如:

- package.json // root package
| - a
| - package.json // module a package
| - b
| - package.json // module b package
您可能需要查看以下内容:
  • npm workspaces
  • lerna

  • 像上面提到的两种支持结构,lerna 都具有更多功能。要快速了解差异,请查看此处: Is Lerna needed anymore with NPM 7.0.0's workspaces?

    关于node.js - 使用 docker 构建的 Yarn 工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67820225/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com