Npm 如何从project.json脚本生成失败
我有一个ASP.NET核心webapp,它使用webpack构建前端代码。Webpack通过npm调用,npm又通过my 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错误,但不会使构建失败 如
{
...
"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如何处理其脚本(预编译、后编译等)中的错误