Невозможно найти модуль "aspnet-webpack" при использовании "публикации в dotnet" в .Net Core 2.0 и Angular
Я пытаюсь выполнить ответы на эту проблему, но безрезультатно. Я пытаюсь опубликовать проект .Net Core 2.0 и Angular, используя команду командной строки 'dotnet publish', которую я успешно публикую, однако при попытке для запуска моего проекта .dll в опубликованной папке, мой проект выплевывает эту ошибку при запуске в среде разработки:
Необработанное исключение: System.AggregateException: произошла одна или несколько ошибок. (Средство промежуточного программного обеспечения Webpack не удалось из-за ошибки при загрузке "aspnet-webpack". Ошибка: Ошибка: не удается найти модуль "aspnet-webpack"
При запуске в Production и разрешении DeveloperExceptionPage (как показано в моем statup.cs ниже) приложение .netcore запускается, но сбой в самом веб-приложении, которое, как я полагаю, связано с большей ошибкой, aspnet-webpack not найдено:
NodeInvocationException: не показано (в обещании): ошибка: для компонента HomeComponent не найдено компонента factory. Вы добавили его в @NgModule.entryComponents?
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
else
{
//app.UseExceptionHandler("/Home/Error");
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}
}
Я не использую @Angular/Cli
, но я использую проект по умолчанию Angular, который генерирует VS2017 (августское обновление, я верю?), которое, кажется, использует только Webpack. Кажется, проблема в том, что в конфигурационном файле проекта есть ссылка, которую я не предоставляю, но я не могу понять, почему это так.
Никакие другие ответы на этот вопрос пока не помогли мне, поэтому я приношу свои извинения, если это повторяющийся вопрос.
Ответы
Ответ 1
У меня была та же проблема с "aspnet-webpack
", она была введена на полпути при разработке проекта, поэтому я был немного удивлен, увидев внезапную смерть решения. Пару месяцев все работало нормально на IIS, но внезапно не загрузилось.
Файлы журнала IIS не помогли, поэтому я попытался решить эту пару способов, один из них сработал. Спешите!
Решение
Я запустил следующее в окне менеджера пакетов:
dotnet run --project <Full path of *.csproj> --configuration Debug
Это дало мне несколько советов, и я начал искать проблему "Error: Cannot find module 'aspnet-webpack
". Я попытался пройти все изменения в последней паре проверок и обнаружил, что мы обновили версию "Microsoft.AspNetCore.All
" с 2.0.0
до 2.0.3
, поэтому ее понижение до первоначальной версии исправило ее.
Я думаю, они оба используют разные версии пакетов узлов. Так что не обновляйте ради, если только по очень хорошей причине. Читая об этом, некоторые биты очень тесно связаны с конкретными версиями, и Angular очень легко ломается, если что-то изменилось. В процессе, хотя мне удалось обновить версию узла до последней версии 5.0.0
Люблю находить больше деталей, но пока нет подробностей о том, зачем нужна конкретная версия.
Ответ 2
После публикации проекта .Net Core 2.0 и Angular и перед его запуском необходимо убедиться, что переменная окружения ASPNETCORE_ENVIRONMENT не установлена в Development. Опубликованный проект не включает поддержку WebpackDevMiddleware или HotModuleReplacement. Но он попытается использовать их, если для среды установлено значение "Развитие".
HotModuleReplacement автоматически обновляет созданные Webpack ресурсы (например, JavaScript, CSS или изображения) в вашем веб-браузере при изменении исходных файлов. Это явно то, чего вы не хотите в производстве.
Если для параметра ASPNETCORE_ENVIRONMENT установлено значение "Разработка", вы можете изменить параметр:
setx ASPNETCORE_ENVIRONMENT "Production"
Вам нужно будет закрыть текущее командное окно и открыть другое, чтобы увидеть изменение.
Вы также можете прокомментировать следующий код в startup.cs, чтобы выполнить тот же результат:
#if DEBUG
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
#endif
Ответ 3
Убедитесь, что вы полностью установили все эти зависимости:
npm install webpack-hot-middleware --save-dev
npm install webpack-dev-middleware --save-dev
npm install aspnet-webpack --save-dev
Ответ 4
В моем случае причина была в том, что SPA (Vue в моем случае) находится в папке ClientApp, и app.UseWebpackDevMiddleware
ожидает, что он будет в корневом каталоге проекта.
Установка опции ProjectPath
решила это для меня.
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true,
ConfigFile = Path.Combine(env.ContentRootPath, @"ClientApp\node_modules\@vue\cli-service\webpack.config.js"),
ProjectPath = Path.Combine(env.ContentRootPath, @"ClientApp")
});
Ответ 5
Убедитесь, что node.js установлен в процессе производства и находится на пути.
node.js используется webpack
Также проверьте, что у вас есть последняя версия node.js(4 +)
Ссылка: AspNetCore + Angular 2: Ошибка WebpackDevMiddleware с новым проектом
Версия node.js может быть проверена с помощью:
where.exe node.exe (Windows 7+)
which node.exe (linux bash)
И, конечно, переменная среды пути должна быть проверена и обновлена, если указывать на устаревшие node.js
Все лучшее
Ответ 6
Я получил ту же ошибку, что и вы в проекте без Angular:
Необработанное исключение: System.AggregateException: произошла одна или несколько ошибок. (Промежуточное программное обеспечение разработчика Webpack не выполнено из-за ошибки при загрузке "aspnet-webpack". Ошибка: Ошибка: не удается найти модуль "aspnet-webpack"
Оказалось, простая проблема с узлом, о которой я обычно забываю.
npm install
Помните, что команды npm должны выполняться в верхнем каталоге, который содержит ваш файл package.json. Я надеюсь, что это поможет тому, у кого столько же проблем, сколько и мне, помнить, что нужно запускать команды npm Спасибо форуму, который напомнил мне:
https://www.ebenmonney.com/forum/?view=thread&id=20&part=1#postid-57
Ответ 7
AT configure function startup.cs Вы можете использовать оператор if для среды разработки.
if (env.IsDevelopment())
{
// Print exception and all details for the developer
app.UseDeveloperExceptionPage();
// Use WebPack to update css , js , html automatically
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
Вы можете использовать этот коман в команде print для изменения текущей среды: setx ASPNETCORE_ENVIRONMENT "Разработка"
Ответ 8
Основная причина этой ошибки заключается в том, что вы используете зависимость где-то в вашем коде, и она не установлена в вашем решении. Если вы используете Visual Studio, попробуйте использовать чистую сборку, она покажет ошибки в вашем проекте, которые помогут вам найти ее.