Npm 如何从project.json脚本生成失败

Npm 如何从project.json脚本生成失败,npm,asp.net-core,webpack,.net-core,project.json,Npm,Asp.net Core,Webpack,.net Core,Project.json,我有一个ASP.NET核心webapp,它使用webpack构建前端代码。Webpack通过npm调用,npm又通过my project.json中的脚本部分调用: { ... "scripts": { "postcompile": "npm run build" } } 如果生成失败,“npm run build”调用将进程退出代码设置为1。尽管如此,从命令行或Visual Studio运行“dotnet build”并没有失败——它会打印npm错误,但不会使构建失败 如

我有一个ASP.NET核心webapp,它使用webpack构建前端代码。Webpack通过npm调用,npm又通过my project.json中的脚本部分调用:

{
  ...
  "scripts": {
    "postcompile": "npm run build"
  }
}
如果生成失败,“npm run build”调用将进程退出代码设置为1。尽管如此,从命令行或Visual Studio运行“dotnet build”并没有失败——它会打印npm错误,但不会使构建失败


如何在我的project.json文件中配置一个额外的构建步骤,如调用“npm run build”,如果该步骤失败,那么该步骤实际上会失败?

如果错误来自网页包构建,请确保在网页包配置中将
bail
属性设置为
true

从:

将第一个错误报告为硬错误,而不是容忍它


我在构建服务器上的CI构建也有同样的问题。生成过程中出现错误,但CI生成没有失败。我无法使用project.json中的脚本(dotnet.exe只是忽略脚本的退出代码)找到解决问题的方法,但在.xproj文件中找到了解决方法

ASP.NET核心项目目前由两个项目文件组成:每个项目的project.json和.xproj。两者都能够运行某种用户定义的脚本。因此,我将脚本合并到.xproj文件中,并将它们从project.json中删除。主要的问题是在编译.NET代码之前找到一种有效的方法来调用它们。这是我的.xproj文件。请注意目标BuildManagementConsole

主要问题是我无法使用“dotnet build”生成项目,我必须使用“msbuild.xproj”命令行。在我看来,此解决方案比将脚本合并到project.json中要好,因为Microsoft将在下一版本的ASP.NET Core中删除它

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>d5feb23f-aaaa-4852-89c2-e1eef6ab52a8</ProjectGuid>
    <RootNamespace>ManagementConsole</RootNamespace>
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj\</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
  <ItemGroup>
    <DnxInvisibleContent Include=".bootstraprc" />
    <DnxInvisibleContent Include=".npmrc" />
    <DnxInvisibleContent Include="npm-debug.log" />
  </ItemGroup>
  <ItemGroup>
    <DnxInvisibleFolder Include=".nuget\" />
  </ItemGroup>
  <Target Name="BuildManagementConsole" BeforeTargets="Build">
    <Exec Command="dotnet restore" />
    <Exec Command="npm cache clean --force" />
    <Exec Command="npm install" />
    <Exec Command="npm run build:$(Configuration)" />
  </Target>
  <Import Project="$(VSToolsPath)\DotNet.Web\Microsoft.DotNet.Web.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

14
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
真的
d5feb23f-aaaa-4852-89c2-e1eef6ab52a8
管理控制台
奥布吉\
垃圾桶\
v4.6.1
萨克
萨克
萨克
萨克
2

我正在使用-我认为这应该足够了。不管怎么说,我还添加了--保释选项,但没有成功。正如我所说,在webpack构建之后,进程退出代码已经设置为1,但是dotnet构建仍然没有失败。我是否正确设置了保释选项?它在my package.json中看起来像:“build”:“webpack--config builds/webpack.prod.config.js--bail”,是的,对于webpack来说这应该足够了。但我不知道为什么
dotnet build
也不帮我。这就是我为什么要提出这个问题的原因:-)是不是“npm运行构建”不应该从“postcompile”调用,而是从不同的脚本入口点调用?OP提到,问题不在于npm退出代码,而在于dotnet.exe如何处理其脚本(预编译、后编译等)中的错误