Таким образом, похоже, что правильная терминология - «Горячая замена модуля» (MHR - AKA «Живая перезагрузка» или «Горячие обновления / перезагрузка»). После этого ответа я получил часть пути:
https://stackoverflow.com/a/50934814/1236397
Отсутствующая часть найдена здесь: https://github.com/aspnet/JavaScriptServices/issues/1654#issuecomment-430053872
Кажется, что обе эти ссылки предполагают, что шаблон Visual Studio создается в готовом для производства, а не в разработке. Два вопроса:
- Папка
ClientApp\dist
может быть создана в какой-то момент, если вы создаете вне Visual Studio. Наличие созданной вручную папки dist
прервет текущую перезагрузку. Эта папка должна быть полностью удалена.
- Шаблон VS ASP.Net Core Angular CLI готов для обслуживания статических файлов в производственном режиме. Создателю шаблона не удалось обернуть разделы для предотвращения загрузки в режиме разработки.
Для # 2 измените эти строки:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
...
public IConfiguration Configuration { get; }
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
...
}
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSpaStaticFiles();
...
}
на это:
public Startup(IHostingEnvironment env, IConfiguration configuration)
{
HostingEnvironment = env;
Configuration = configuration;
}
...
public IHostingEnvironment HostingEnvironment { get; private set; }
public IConfiguration Configuration { get; }
...
public void ConfigureServices(IServiceCollection services)
{
...
if (HostingEnvironment.IsProduction())
{
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
...
}
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
if (env.IsProduction())
{
app.UseSpaStaticFiles();
}
...
}
Однако на этом этапе страницы обновляются полностью. Это потому, что HMR не включен по умолчанию. Вы должны будете следовать соответствующей документации здесь:
https://github.com/angular/angular-cli/wiki/stories-configure-hmr
Если ссылка вообще не работает, просто найдите документацию с помощью запроса configure HMR for angular CLI
.
Совет: если вам нужна поддержка IE9-11, взгляните на файл polyfills.ts
и игнорируйте строку import 'classlist.js'
, если она вам не нужна (в противном случае запустите npm install --save classlist.js
).