简体   繁体   English

如何在 ASP.NET Core 中构建之前运行特定的 NPM 命令?

[英]How do I run a specific NPM command before build in ASP.NET Core?

I am trying to run a specific NPM command for Angular within my ASP.NET Core application.我正在尝试在我的 ASP.NET Core 应用程序中为 Angular 运行特定的 NPM 命令。 The NPM is nothing special, it just prepares some files. NPM 没什么特别的,它只是准备了一些文件。

How can I automate to run the NPM script before each build in ASP.NET Core?如何在每次构建 ASP.NET Core 之前自动运行 NPM 脚本?

The Angular app is within the ClientApp folder, with the package.json in it. Angular 应用程序位于 ClientApp 文件夹中,其中包含 package.json。

If you used the default angular SPA Template it should come with Tasks setup that get executed when you run it (ie before build).如果您使用默认的 angular SPA 模板,它应该附带在您运行它时(即在构建之前)执行的任务设置。

From the default angular SPA template:从默认的角度 SPA 模板:

<PropertyGroup>
    <SpaRoot>ClientApp\</SpaRoot>
</PropertyGroup>

<ItemGroup>
    <!-- Don't publish the SPA source files, but do show them in the project files list -->
    <Content Remove="$(SpaRoot)**" />
    <None Remove="$(SpaRoot)**" />
    <None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
</ItemGroup>

<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
    <!-- Ensure Node.js is installed -->
    <Exec Command="node --version" ContinueOnError="true">
      <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
    </Exec>
    <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
    <Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
</Target>

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />

    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
        <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
        <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
        <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </ResolvedFileToPublish>
</ItemGroup>

You can just add a Target to your .csproj file that executes a script at certain steps.您只需将Target添加到您的.csproj文件中,该文件在特定步骤执行脚本。 For example, the following will run the installed gulp.cmd just before the server application is built:例如,以下将在gulp.cmd服务器应用程序之前运行已安装的gulp.cmd

<Target Name="RunGulp" BeforeTargets="Build">
  <Exec Command="node_modules\.bin\gulp.cmd" />
</Target>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM