错误代码MSB3073:命令“npm install”以1的代码退出。

6
我正在将我的 .Net + React.js 应用程序容器化,但在过程中遇到了意外错误。我已经熟悉了类似的帖子,但没有一个解决方案能够解决我的问题。由于构建日志非常长,我已经将其放在 pastebin 上:

https://pastebin.com/PhfYW3zm

我使用的Dockerfile来自官方文档,所以让我感到惊讶的是它无法工作:

https://learn.microsoft.com/en-us/visualstudio/containers/container-tools-react?view=vs-2022

Dockerfile本身:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs
WORKDIR /src
COPY ["WebApp/WebApp.csproj", "WebApp/"]
RUN dotnet restore "WebApp/WebApp.csproj"
COPY . .
WORKDIR "/src/WebApp"
RUN dotnet build "WebApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApp.dll"]
3个回答

7

根据用户PKLeso在https://github.com/dotnet/sdk/issues/9593中的建议,从.csproj文件中删除npm install标签解决了该问题。

<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" /> 

如果我没记错的话,这将完全从您的容器中删除前端。但是,如果您想在容器中保留它,请确保您的前端上的npm install没有错误。否则会出现MSB3073错误。


0
如果在React应用程序中存在依赖冲突,例如在将React升级到最新版本后,由于此原因,在ClientApp上调用npm install不会运行,而npm install --force会运行,则可以在.csproj中添加--force 以解决这个问题。
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />

行,这样它就变成了

<Exec WorkingDirectory="$(SpaRoot)" Command="npm install --force" />

0

不知道它是否仍然有用,但实际上我发现使用ContinueOnError="true" xml属性很有用。

<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" ContinueOnError="true"/>
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --configuration production" ContinueOnError="true" />

这样,npm抛出的每个异常(如漏洞消息)都将被忽略,构建将继续进行,安装npm包并构建前端节点资产。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接