我正在构建一个web应用程序。前端是angular,后端是。net Core。
目前,我正在做以下事情来构建我的最终docker映像:
- 构建angular应用
- 将编译好的angular文件拷贝到asp.net core的目录
- 构建asp.net core app
- 发布asp.net core app
- 在docker镜像中复制发布结果
这是我当前的dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM node:latest as node
WORKDIR /app
COPY Frontend .
RUN npm install
RUN npm run build
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Backend/my-project.csproj", "Backend/"]
RUN dotnet restore "Backend/my-project.csproj"
COPY Backend Backend
WORKDIR "/src/Backend"
COPY --from=node /app/dist/app/ /wwwroot/
RUN dotnet build "my-project.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "my-project.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "my-project.dll"]
整个过程没有错误完成,但是当我试图访问http://localhost/
时,我得到了html,但是有一个javascript错误:
Uncaught TypeError: (0 , d.__decorate) is not a function
at Object.619 (main.3ba20fe70ead0a4b.js:1:45137)
at r (runtime.834ae414fca175dc.js:1:127)
at Object.1983 (main.3ba20fe70ead0a4b.js:1:45670)
at r (runtime.834ae414fca175dc.js:1:127)
at main.3ba20fe70ead0a4b.js:1:512504
at n (runtime.834ae414fca175dc.js:1:2649)
at main.3ba20fe70ead0a4b.js:1:57
但:
ng serve
工作结果- 服务于测试服务器
npm build
工作的结果 - 将
npm build
的结果复制到我的asp.net core的wwwroot中调试 - 发布asp.net核心应用程序(与wwwroot填充)也工作
- 当我试图访问我的npm构建文件夹中存在的每个单独文件时,它似乎是可访问的(不确定,因为名称有这个数字不完全相同)
- 如果我删除nodes_modules, package -lock。运行
npm install
和npm run build
,它也可以工作 - 我删除了angular的应用,创建了另一个,运行整个docker构建,它可以工作了。
- 我试图将节点更改为我在计算机上使用的版本(节点16.14)
编辑我开始从我的应用程序中删除所有东西,看看它什么时候重新开始工作。似乎一旦我删除了NgxsModule.forFeature([])
的状态,它就工作了。
基本上,如果我有一个带有:NgxsModule.forFeature([])
它可以工作,但NgxsModule.forFeature([UiState])
不能,即使ustate几乎为空:
@State<UiStateModel>({
name: 'ui',
defaults: {
isMenuOpen: true,
},
})
@Injectable()
export class UiState {}
我有点绝望了,你知道什么会导致这个错误吗?
我不太确定是什么做到的,但我终于解决了。我做了什么:
- 我有一些ngxs包被称为开发依赖和依赖(与不同的版本),我只保留一个在依赖
- 在我的tsconfig。json,我有一个路径指定"tslib"(到node_modules一个)。我记得我添加了它,但我不记得为什么,我认为在某些时候我有一个编译错误,我发现在SO这个解决方案。我确实删除了tslib的这个路径,这可能是解决问题的方法。