生成ASP.NET Core项目时如何自动安装npm模块 - c#

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

WebApiProject
│
├── ClientApp/
│   ├── public/
│   ├── src/
│   └── package.json
│
├── Controller/
├── Models/
├── appsettings.json
├── Program.cs
└── Startup.cs

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

对于前端开发人员来说,这是很正常的,但是对于仅专注于后端开发的一些开发人员来说,他们必须做一些额外的过程才能构建项目是很麻烦的(他们通常只是,这很好)。

我尝试了以下方法:

将nodejs目录添加到ctrl + F5,我以为这会确认IDE为我完成了工作,但似乎没有。
原始的Tools -> Options -> External Web Tools文件提供了这样的方法:


<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" />

  <!-- Include the newly-built files in the publish output -->
  <ItemGroup>
    <DistFiles Include="$(SpaRoot)build\**; $(SpaRoot)build-ssr\**" />
    <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
      <RelativePath>%(DistFiles.Identity)</RelativePath>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </ResolvedFileToPublish>
  </ItemGroup>
</Target>

在发布时,这似乎是ASP.NET项目的某种自动脚本,但我不太了解如何对其进行调整,以使其在开发模式构建时就可以正常工作。

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

参考方案

您的配置正确,但是仅适用于发布项目,请将其添加到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>

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

将asp.net.core 2.0应用发布到IIS时JavaScript无法运行 - javascript

我是这里的新手。我有一个VS2017 asp.net C#Web应用程序。我目前不在使用Angular。这是一个简单的网站。我隐藏了div,当用户单击菜单项时,相关的div出现,而我隐藏了其余的div。我使用JavaScript完成此任务。在开发和IIS Express中,它可以工作。当我发布到IIS时,它不起作用。静态页面显示“确定”,但菜单按钮不执行任何…

使用Java脚本基于另一个控件项来验证ASP.NET C#控件 - c#

我正在尝试确保一个下拉框或另一个下拉框具有选定的条目,不能两者都选,并且不能都留空/未选择。每次单击运行javascript验证代码的搜索按钮时,即使我只是从一个下拉列表中选择,甚至从两个下拉列表中都没有选择,我都会收到一条消息,好像在两个下拉框中都选择了一样!这可能是我的逻辑,但是,我认为也可能是我的变量读为null。是否有人对问题可能是什么以及如何解决这…

ASP.net C#崩溃一行 - c#

我有一个母版页,在on load事件中包含以下几行: string menuIDdata = Page.Request.QueryString["mid"]; menuID = 0; // Get the menu ID if (!int.TryParse(menuIDdata, out menuID)) { menuID = 0; } …

如果数字是1或0,则显示不同的图标-ASP.NET C#MVC JQuery - javascript

我有一个生成随机数的模型:public int IsLocked { get { var rnd = new Random(); return rnd.Next(0, 2); } } 这是我的局部视图:<table class="table table-striped table-hover dataTable admin-form them…

具有动态集合的MVC模型绑定 - c#

根据具有启发性的Scott Hanselman文章中关于ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries的复杂性: 我们通过查找parameterName[index].PropertyName来读取属性 索引必须从零开始,并且是连续的所以这个H…