Aurelia и веб-пакет во время публикации dotnet в ASP.NET Core 2.0 и Visual Studio 2017 - PullRequest
0 голосов
/ 29 апреля 2018

В проекте ASP.NET Core 2.0 Aurelia используется

au new --here

Я хочу создать следующие артефакты при публикации решения

\wwwroot\dist\app.bundle.js
\wwwroot\dist\vendor.bundle.js

Я могу достичь этого вручную

npx webpack --config webpack.netcore.config.js

Но я бы хотел начать сборку webpack, когда опубликую:

dotnet publish -c Release

Моя конечная цель состоит в том, чтобы процесс VSTS CI / CD использовал MSBuild для автоматического связывания файлов SPA, как требуется выше.

Обратите внимание, что при разработке я уже использую горячую замену модуля через

using Microsoft.AspNetCore.SpaServices.Webpack;

И

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
    {
      HotModuleReplacement = true, 
      ConfigFile="webpack.netcore.config.js",
      HotModuleReplacementClientOptions = new Dictionary<string,string>{
        {"reload", "true"}
      }
    });
}

Это работает как положено. Но теперь мне нужно добиться того же во время публикации.

В качестве быстрого исправления я добавил событие после сборки

  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="npx webpack --config webpack.netcore.config.js" />
  </Target>

Как получить объясненную пользовательскую цель MSBuild RunWebpack здесь ?

1 Ответ

0 голосов
/ 01 августа 2018

Так я тоже столкнулся с той же проблемой. Я заметил, что в файле webpack.config.js есть следующие строки:

output: {
    path: outDir,
    publicPath: baseUrl,
    filename: production ? '[name].[chunkhash].bundle.js' : '[name].[hash].bundle.js',
    sourceMapFilename: production ? '[name].[chunkhash].bundle.map' : '[name].[hash].bundle.map',
    chunkFilename: production ? '[name].[chunkhash].chunk.js' : '[name].[hash].chunk.js'
  },

Но в файле webpack.netcore.config.js он содержал:

config.output.filename = '[name].bundle.js';

Поэтому, когда вы публикуете его, он ожидает, что ядро ​​.net скопирует файлы app.bundle.js и vendor.bundle.js, но их там нет, потому что в webpack есть его под другим именем из-за целей кэширования. Поэтому замените эту строку следующим:

config.output.filename = '[name].[chunkhash].bundle.js';
...