c# - Nuget 套件 Microsoft.TypeScript.MSBuild 在 Dockerfile 中失敗
我有一個包含多個 TypeScript 文件的 ASP.NET Core 專案。該專案引用了 Microsoft.TypeScript.MSBuild,以自動將這些 TS 文件編譯成 JavaScript 文件。
<ItemGroup>
<PackageReference Include="Microsoft.TypeScript.MSBuild" Version="3.2.3" />
</ItemGroup>
這個設定在我嘗試將專案 Docker 化之前是可行的。當我按照這裡的範例操作時,就會出現錯誤:
/root/.nuget/packages/microsoft.typescript.msbuild/3.2.3/tools/Microsoft.TypeScript.targets(305,5):錯誤 MSB6003:無法執行指定的任務可執行檔“node”。沒有此類文件或目錄 [/app/MyProject.csproj] 命令 '/bin/sh -c dotnet publish -c Release -o out' 返回了非零代碼:1
如何解決這個問題?
答案#1
在 Windows 上,Microsoft.TypeScript.MSBuild 包含 tsc.exe。在非 Windows 平台上,例如在 Docker 容器中,Microsoft.TypeScript.MSBuild 不包含 ts.exe,而是透過 Node 來執行 TypeScript 編譯器。我認為官方的 dotnet/sdk Docker 映像在過去某個時間點是包含 Node 的,但現在已經不再包含 Node。你將需要自行建立或尋找一個同時包含 dotnet-sdk 和 Node 的 Docker 映像,或配置涉及官方 Node 映像的多階段構建。