在.Net Core 2.0和Angular中使用’dotnet publish’时找不到模块’aspnet-webpack’

我一直试图按照这个问题的答案,但无济于事。我正在尝试使用命令行命令’dotnet publish’发布我的.Net Core 2.0和Angular项目我成功发布,但是当我尝试运行我的项目时。在已发布的文件夹中,我的项目在开发环境中运行时吐出此错误:

未处理的exception:System.AggregateException:发生一个或多个错误。 (Webpack dev中间件因加载’aspnet-webpack’时出错而失败。错误是:错误:无法找到模块’aspnet-webpack’

在Production中运行并允许DeveloperExceptionPage(如下面的statup.cs所示).netcore应用程序运行,但在实际的Web应用程序中崩溃,我认为是由于更大的错误,找不到aspnet-webpack:

NodeInvocationException:Uncaught(在promise中):错误:找不到HomeComponent的组件工厂。 你有没有把它添加到@ 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 ,但我使用的是VS2017(8月更新,我相信?)生成的默认Angular项目,它似乎只使用Webpack。 问题似乎是项目的生产配置需要我没有提供的参考,但我无法弄清楚为什么会这样。

到目前为止,这个问题没有其他答案对我有所帮助,所以如果这是一个重复的问题我会道歉。

我在“aspnet-webpack”中遇到了同样的问题,这是在项目开发中途引入的,所以我对这个解决方案的突然死亡感到有些惊讶。 它在IIS上工作了好几个月,但突然无法启动。

IIS日志文件没有帮助,所以我尝试解决这两种方法,其中一种方法有效。 匆忙!

所以解决方案是:我在包管理器窗口上运行了以下内容 –

 dotnet run --project  --configuration Debug 

它给了我一些指示,我开始搜索“错误:无法找到模块’aspnet-webpack’”的问题。 我试图通过最后几次签到的所有更改,发现我们将“Microsoft.AspNetCore.All”从2.0.0更新到2.0.3版本,因此将其降级为原始版本修复它。

我猜他们都使用不同版本的节点包。 所以除非出于一个很好的理由,否则不要更新。 阅读这些部分非常紧密地耦合到特定版本,如果发生变化,Angular很容易中断。 虽然我已经设法将节点版本升级到最新的5.0.0

喜欢查找更多细节,但暂时没有详细说明为什么需要特定版本。

发布.Net Core 2.0和Angular项目之后,在运行之前,需要确保环境变量ASPNETCORE_ENVIRONMENT未设置为Development。 已发布的项目不包括对WebpackDevMiddleware或HotModuleReplacement的支持。 但如果将环境设置为“开发”,它将尝试使用它们。

每当更改源文件时,HotModuleReplacement都会在Web浏览器中自动更新Webpack构建的资源(例如JavaScript,CSS或图像)。 这显然是你不想要的东西。

如果ASPNETCORE_ENVIRONMENT设置为“开发”,您可以使用以下命令更改设置:

 setx ASPNETCORE_ENVIRONMENT "Production" 

您需要关闭当前命令窗口并打开另一个窗口以查看更改。

您还可以在startup.cs中注释掉以下代码以完成相同的结果:

 #if DEBUG app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions { HotModuleReplacement = true }); #endif 

检查node.js是否已安装在生产环境中且位于路径中。

Nodepack使用Node.js

还要检查您是否有最新版本的Node.js(4+)

参考: AspNetCore + Angular 2:WebpackDevMiddleware新项目出错

可以使用以下命令检查Node.js的版本:

 where.exe node.exe (Windows 7+) which node.exe (linux bash) 

当然,如果指向过时的Node.js,则应检查并更新路径环境变量

祝一切顺利