2016-12-21 9 views
1

Ich habe eine ASP.NET Core Webanwendung, die Front-End-Code mit Webpack erstellt. Webpack über npm, die wiederum aufgerufen über die Skripte Abschnitt in meinem project.json genannt wird:Wie der Build von project.json Skripts fehlschlägt

{ 
    ... 
    "scripts": { 
    "postcompile": "npm run build" 
    } 
} 

Die „npm Lauf build“ Aufruf setzt den Prozess Exit-Code auf 1, wenn der Build fehlschlägt. Nichtsdestotrotz schlägt das Ausführen von "dotnet build" entweder von der Befehlszeile oder von Visual Studio nicht fehl - es druckt die npm-Fehler, aber es scheitert nicht an dem Build.

Wie kann ich einen zusätzlichen Build-Schritt konfigurieren, wie den Aufruf von "npm run build" in meiner project.json-Datei, die den Build tatsächlich fehlschlägt, wenn der Schritt fehlschlägt?

Antwort

-1

Stellen Sie sicher, dass Sie die bail Eigenschaft auf true in webpack Config gesetzt, wenn die Fehler aus der webpack ist

Vom docs bauen:

Kaution
Bericht den ersten Fehler als schwer Fehler, anstatt es zu tolerieren.

+0

Ich benutze das https://www.npmjs.com/package/webpack-fail-plugin - ich dachte, das sollte genug sein. Wie auch immer, ich habe auch die Option --bail hinzugefügt, ohne Erfolg. Wie gesagt, der Prozess-Exit-Code ist nach dem Webpack-Build bereits auf 1 gesetzt, aber dotnet-Build schlägt immer noch nicht fehl. Habe ich die Kaution korrekt eingestellt? Es sieht aus wie in meinem Paket.json: "build": "webpack --config builds/webpack.prod.config.js --bail", – Schweder

+0

Ja, das sollte für das Webpack reichen. Aber ich weiß nicht, warum 'dotnet build' es nicht aufnimmt – jontem

+0

Ich auch nicht. Deshalb habe ich diese Frage gestellt :-) Könnte es sein, dass "npm run build" nicht von "postcompile" aufgerufen werden sollte, sondern von einem anderen Skript-Einstiegspunkt? – Schweder

0

Ich hatte genau das gleiche Problem mit meinem CI Build auf unserem Build-Server. Während des Builds sind Fehler aufgetreten, der CI-Build ist jedoch nicht fehlgeschlagen. Ich konnte keine Lösung für das Problem mit Skripten in project.json (dotnet.exe ignoriert nur den Exit-Code des Skripts) finden, sondern fand einen Weg, um es in .xproj-Datei zu lösen.

ASP.NET Core-Projekt besteht derzeit aus 2 Projektdateien: project.json und .xproj pro Projekt. Beide können eine Art benutzerdefinierter Skripts ausführen. Also habe ich meine Skripte in die .xproj-Datei integriert und sie aus project.json gelöscht. Das Hauptproblem bestand darin, einen funktionierenden Weg zu finden, sie vor der Kompilierung von .NET-Code aufzurufen. Also hier ist meine .xproj-Datei. Beachten Sie die Ziel-BuildManagementConsole.

Das Hauptproblem ist, dass ich kein Projekt mit 'dotnet build' erstellen kann, muss ich 'msbuild .xproj' Befehlszeile verwenden. Meiner Meinung nach ist diese Lösung besser als die Integration von Skripten in project.json, da Microsoft sie in der nächsten Version von ASP.NET Core entfernen wird.

<?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> 
Verwandte Themen