Невозможно найти модуль "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, попробуйте использовать чистую сборку, она покажет ошибки в вашем проекте, которые помогут вам найти ее.