Как заставить Visual Studio 2017 называть "начало пряжи"

У меня есть проект React, и я запускаю его с yarn start это работает react-scripts start,

Я хочу использовать Visual Studio 2017 для редактирования кода и запуска приложения, но я не хочу запускаться с использованием VS2017 node.js, я хочу нажать F5 и продолжать использовать реагирующие сценарии.

Есть ли способ сделать это?

## Обновить ##

Для тех, кто хочет лучшего .njsproj формат файла, есть идея в сообществе разработчиков, которая заслуживает одобрения: https://developercommunity.visualstudio.com/content/idea/351736/use-new-project-format-for-njsproj-files.html

4 ответа

Решение

Вы можете добавить его в качестве шага перед сборкой в ​​настройках проекта, но я думаю, что лучший способ это сделать с помощью пользовательских целей в вашем файле.csproj. Я использую Vue вместо того, чтобы реагировать. Это то, что я использую в моем.csproj, и вы можете сделать что-то подобное.

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="RunNpmBuild" Condition="'$(Configuration)' != 'ServerOnly'">
    <Exec Command="yarn" WorkingDirectory="./www" />
    <Exec Command="npm run build" WorkingDirectory="./www" />
  </Target>
  <Target Name="BeforeBuild" DependsOnTargets="RunNpmBuild">
  </Target>

Обратите внимание, что у меня также есть дополнительная конфигурация сборки под названием "ServerOnly", основанная на конфигурации отладки, так что я могу отлаживать f5 только на сервере без необходимости запуска yarn или моей сборки npm.

Другим обходным решением может быть изменение раздела скрипта в package.json на

"scripts": {
    "start": "yarn react-scripts start"
     ...
}

который будет достигнут конфигурацией на Startup.cs.

if (env.IsDevelopment())
{
    spa.UseReactDevelopmentServer(npmScript: "start");
}

То же самое для React и всех других проектов одностраничных приложений. У меня есть SPA, написанный в React, и я использовал его в файле 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 'yarn'. This may take several minutes..." />
        <Exec WorkingDirectory="$(SpaRoot)" Command="yarn 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="yarn install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="yarn 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>

Другой способ — использовать Yarn.MSBuild . Объясняется, как в этом ответе .

Другие вопросы по тегам