【问题标题】:Defining command to be run with dotnet watch定义要使用 dotnet watch 运行的命令
【发布时间】:2019-01-20 08:10:01
【问题描述】:

我有一个带有反应前端的 dotnet 核心项目,它使用 neutrino 来管理预设和配置。构建过程运行'yarn build'在编译dotnet代码之前使用Babel构建jsx文件:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="yarn build" />
  </Target>

我已使用以下内容设置了我的 csproj 文件以观察更改:

  <ItemGroup>
    <Watch Include="**\*.cs" />
    <Watch Include="**\*.jsx" Exclude="node_modules\**\*;build\*" />
  </ItemGroup>

当我使用“dotnet watch run”运行项目时,一切正常,但 jsx 文件和 dotnet 项目的构建过程的总长度可能需要大量时间。

有没有办法配置它,使“yarn build”只针对 jsx 文件的更改运行,并且只在 cs 文件更改时重建 dotnet 部分?

【问题讨论】:

  • 你的 yarn build 的主要输出是什么?输出中有一个 .js 文件?
  • 是两个js文件,一些css文件,还有一个index.html

标签: c# reactjs .net-core jsx csproj


【解决方案1】:

我知道这有点晚了,但我想加入并为 Martin Ullrich 的回答添加更多内容。我建议设置两个单独的后台任务来观看两种不同类型的编译。

在 bash 中:

dotnet watch run & # watch C# changes
dotnet watch msbuild /t:YarnBuild & # watch javascript changes

注意&amp;,它在后台执行前面的命令。

要将后台进程带到前台,首先使用jobs 命令查看后台进程。从那里,您可以使用fg &lt;processID&gt; 将其置于前台。 CTRL+Z 将其发送回后台。

在PowerShell中:

Start-Job { dotnet watch run }; # watch C# changes
Start-Job { dotnet watch /t:YarnBuild }; # watch javascript changes

我不知道有一种方法可以像在 bash 中那样将 powershell 作业带到前台,但您可以使用 Receive-Job 读取输出。首先,使用Get-Job 获取所有正在运行的作业及其 ID 的列表。从那里,使用Receive-Job &lt;processID&gt; 查看您的作业的输出。

我发现这种方法最符合人体工程学,因为它省去了我必须想出一个可憎的单命令来做我想做的一切的麻烦。使用后台作业可能会导致更多的击键,但更容易遵循工作流程。 :)

更多关于 bash 作业的信息:https://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html

有关 powershell 作业的更多信息: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_jobs?view=powershell-7.1

【讨论】:

    【解决方案2】:

    您可以为 dotnet 而不是 run 提供自定义参数来执行自定义 msbuild 目标:

    dotnet watch msbuild /t:YarnBuild
    

    对于项目文件中的目标,例如:

    <Target Name="YarnBuild" BeforeTargets="BeforeBuild">
      <Exec Command="yarn build" />
    </Target>  
    <ItemGroup>
      <Watch Include="**\*.jsx" Exclude="node_modules\**\*;build\*" />
    </ItemGroup>
    

    【讨论】:

    • 还会运行 dotnet 项目吗?然后当文件更改时,只运行 yarn build?
    • 是的,这将仅在监视文件上的任何 (cs/jsx/...) 文件更改上运行 yarn 构建
    • 啊,我发现我没有回答你的一半问题
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2021-12-03
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多