构建 ASP.NET Core 项目时如何自动安装 npm 模块

Bug*_*ang 5 c# visual-studio npm reactjs asp.net-core

我正在构建一个以 ASP.NET Core Web API 作为后端,以 React SPA 作为前端的项目,文件夹结构如下所示:

WebApiProject
?
??? ClientApp/
?   ??? public/
?   ??? src/
?   ??? package.json
?
??? Controller/
??? Models/
??? appsettings.json
??? Program.cs
??? Startup.cs
Run Code Online (Sandbox Code Playgroud)

当我在 React 项目中添加新的 npm 模块(将更新 package.json),并推送到我们团队的 Git repo 时,其他团队成员必须在他们拉新提交后手动npm installClientApp目录中执行此操作,否则构建过程将失败缺少依赖项。

对于前端开发者来说,这很正常,但对于一些只专注于后端开发的开发者来说,就相当麻烦,他们必须做一些额外的过程才能构建项目(他们通常只是ctrl + F5和去就好了)。


我尝试了以下方法:

  • 将 nodejs 目录添加到Tools -> Options -> External Web Tools,我认为这会承认 IDE 为我做这项工作,但似乎不是。
  • 原始.csproj文件提供了这样的方法:
WebApiProject
?
??? ClientApp/
?   ??? public/
?   ??? src/
?   ??? package.json
?
??? Controller/
??? Models/
??? appsettings.json
??? Program.cs
??? Startup.cs
Run Code Online (Sandbox Code Playgroud)

在发布时,这似乎是 ASP.NET 项目的某种自动脚本,但我不太知道如何调整它以使其在开发模式构建时完成工作。


有没有办法使npm installASP.NET IDE 构建过程单独出现?换句话说,我正在寻找一种在构建 ASP.NET 项目时自动安装 npm 模块的方法。

Ton*_*Ngo 12

您的配置是正确的,但这仅适用于发布您的项目将其添加到您的 csproj 文件中

 <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>
Run Code Online (Sandbox Code Playgroud)

这将确保您的项目npm install在启动 ASP.Net Core 项目之前运行

  • 是的,经过一些修改后它起作用了。我删除了 `And !Exists('$(SpaRoot)node_modules')` 代码。因为node_modules可能已经存在。 (3认同)
  • 谢谢!您认为将`npm install`修改为`npm ci`来锁定版本会更好吗?虽然我发现“npm ci”比“npm install”慢得多。不知道为什么。 (2认同)