Выполните команду npm в дочернем каталоге из сценария развертывания netcore - PullRequest
0 голосов
/ 17 мая 2019

У меня есть проект netcore webAPI, где веб-интерфейс с package.json и угловой CLI не находится в корневой папке. Перед развертыванием мне нужно выполнить команду npm в папке ./ClientApp.

Структура проекта:

├── ClientApp
│   ├── package.json
│   ├── angular.json
│   ├── node_modules
│   └── ...
├── Controllers
├── Views
├── *.csproj
└── startup.cs

Если файл packpage.json находится в корневой папке, это можно сделать в файле *.csproj следующим образом:

<Exec Command="npm run prod" />

Однако перед выполнением следующей команды мне нужно сменить каталог. Примерно так:

  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec Command="cd .\ClientApp; npm run prod" />

Есть ли какое-нибудь рабочее решение в этом случае?

1 Ответ

1 голос
/ 17 мая 2019

Ваш файл csproj должен быть таким

<PropertyGroup>
    <SpaRoot>ClientApp\</SpaRoot> // you define the folder to run npm script
</PropertyGroup>
<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" />

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

$(SpaRoot) - это значение, которое вы определяете в группе свойств, поэтому сборка будет знать рабочий каталог для вашего углового приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...