首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器化角度构建每次重新编译

容器化角度构建每次重新编译
EN

Stack Overflow用户
提问于 2021-09-08 20:52:26
回答 1查看 186关注 0票数 0

上下文

最近,我一直在尝试将我的角度构建封装起来,因为我将前端和后端一起部署在一个映像中。Dockerfile如下:

代码语言:javascript
复制
# Build frontend
FROM node:16 AS node-build
WORKDIR /app

COPY frontend/package.json frontend/package-lock.json ./
RUN npm install

COPY frontend .
RUN npm run build

# Build backend
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS dotnet-build
WORKDIR /app

COPY backend ./
RUN dotnet restore Api
RUN dotnet publish Api -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=dotnet-build /app/out .
COPY --from=node-build /app/dist/film-portal wwwroot/

ENTRYPOINT ["dotnet", "Api.dll"]

问题

上面的Dockerfile完美地构建了所讨论的图像,在部署之后,它的工作方式就像一种魅力。然而,构建比我想的要花费更多的时间。让我解释一下:

  • npm install只在package.jsonpackage-lock.json发生更改时才运行。这很好,而且节省了时间。
  • 只要接触到前端代码,就会运行npm run build。这当然是有意的行为,但它每次都会重新编译角库代码,而不是缓存编译的结果(就像从本地shell执行npm run build时一样)。

我正在寻找一种方法来缓存编译角库代码的结果,所以npm run build只需要构建我自己的代码(只需要更少的时间来完成)。在虚构的语法中,我需要类似于我的Dockerfile中用于前端阶段的如下内容:

代码语言:javascript
复制
FROM node:16 AS node-build
WORKDIR /app

COPY frontend/package.json frontend/package-lock.json ./
RUN npm install
RUN npm compile-angular

COPY frontend .
RUN npm run build

在这里,npm compile-angular只在package.jsonpackage-lock.json更改时才会编译角位,而不是每次我接触前端代码中的某个文件时。

不幸的是,据我所知,在角CLI中没有专门编译角库代码的命令,而忽略了用户代码。而且,我读过的所有教程都没有提到重新编译的问题,所以我可能在这里遗漏了什么。尽管如此,我很难想象我是第一个遇到这个问题的人,我想至少应该有一个解决办法。因此,概括地说:

  1. 有没有办法避免在像我这样的对接设置中重新编译角库代码?
  2. 如果没有,是否至少有一个解决办法,也许通过在Docker之外执行构建步骤?
EN

回答 1

Stack Overflow用户

发布于 2021-09-10 12:28:09

经过长时间的搜索,我在第17017期存储库中找到了有关角巩膜的信息。针对该问题的其中一条评论提到,有一种方法可以触发ESM编译:./node_modules/.bin/ngcc --properties es2015。有了这些知识,我修改了我的Dockerfile,它工作起来就像一种魅力,不再在每次更改自己的代码时重新编译角库代码:

代码语言:javascript
复制
# Build frontend
FROM node:16 AS node-build
WORKDIR /app

COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci

# Hack to make sure the angular modules are compiled at this stage
RUN ./node_modules/.bin/ngcc --properties es2015

COPY frontend .
RUN npm run build

# Build backend
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS dotnet-build
WORKDIR /app

COPY backend ./
RUN dotnet restore Api
RUN dotnet publish Api -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=dotnet-build /app/out .
COPY --from=node-build /app/dist/film-portal wwwroot/

ENTRYPOINT ["dotnet", "Api.dll"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69109540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档