我一直试图回答这个问题的答案,但无济于事。我正在尝试发布我的.Net Core 2.0& Angular项目使用命令行命令' dotnet publish'我成功发布了,但是当尝试在发布的文件夹中运行我的项目的.dll时,我的项目在开发环境中运行时吐出了这个错误:
未处理的异常:System.AggregateException:发生了一个或多个错误。 (Webpack dev中间件因加载时出现错误而失败&#asp;-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
,但我使用的是默认的Angular项目VS2017(8月更新,我相信?)生成,似乎只使用Webpack。问题似乎是项目的生产配置需要我没有提供的参考,但我无法弄清楚为什么会这样。
到目前为止,这个问题没有其他答案对我有所帮助,所以如果这是一个重复的问题我会道歉。
答案 0 :(得分:10)
发布.Net Core 2.0& Angular项目,在运行之前,您需要确保环境变量ASPNETCORE_ENVIRONMENT没有设置为Development。已发布的项目不包含对WebpackDevMiddleware或HotModuleReplacement的支持。但是如果将环境设置为Development,它将尝试使用它们。
只要更改源文件,HotModuleReplacement就会自动更新Web浏览器中的Webpack构建的资源(例如JavaScript,CSS或图像)。这显然是你在制作中不想要的东西。
如果ASPNETCORE_ENVIRONMENT设置为"开发",您可以使用以下命令更改设置:
setx ASPNETCORE_ENVIRONMENT "Production"
您需要关闭当前命令窗口并打开另一个窗口以查看更改。
您还可以在startup.cs中注释掉以下代码以完成相同的结果:
#if DEBUG
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
#endif
答案 1 :(得分:6)
我和#34; aspnet-webpack"有同样的问题,这是在项目开发中途引入的,所以我有点惊讶地发现解决方案突然死亡。它在IIS上工作了好几个月,但突然无法启动。
IIS日志文件没有帮助,所以我尝试解决了这两种方法,其中一种方法有效。快!
所以解决方案是:我在包管理器窗口上运行了以下命令 -
dotnet run --project <Full path of *.csproj> --configuration Debug
它给了我一些指示,我开始搜索&#34;错误:无法找到模块&#39; aspnet-webpack&#39;&#34;问题。我试图通过最后几次签到的所有更改,发现我们更新了&#34; Microsoft.AspNetCore.All&#34;从2.0.0到2.0.3版本,因此将其降级为原始版本修复它。
我猜他们都使用不同版本的节点包。因此,除非有充分的理由,否则不要更新。阅读这些内容非常紧密地耦合到特定版本,如果发生变化,Angular很容易中断。虽然我已经设法将节点版本升级到最新的5.0.0
喜欢查找更多详细信息,但暂时没有详细说明为什么需要特定版本。
答案 2 :(得分:5)
在我的情况下,原因是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")
});
答案 3 :(得分:2)
检查 node.js 是否已安装在生产环境中且位于路径中。
Node.js 由webpack
使用同时检查您是否有最新版本的 Node.js(4 +)
参考:AspNetCore + Angular 2: WebpackDevMiddleware Error with new project
Node.js 的版本可以通过以下方式检查:
property_representation
当然,如果指向过时的 Node.js
,则应检查并更新路径环境变量一切顺利
答案 4 :(得分:2)
确保已完全安装所有这些依赖项:
npm install webpack-hot-middleware --save-dev
npm install webpack-dev-middleware --save-dev
npm install aspnet-webpack --save-dev
答案 5 :(得分:1)
在没有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
答案 6 :(得分:0)
startup.cs的AT配置功能您可以在开发环境中使用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();
}
您可以在命令打印中使用此命令来更改当前环境: setx ASPNETCORE_ENVIRONMENT“开发”
答案 7 :(得分:0)
此错误的主要原因是您在代码中的某处使用了依赖项,并且未将其安装在解决方案中。如果您使用的是Visual Studio,请尝试使用全新版本,它会在您的项目中显示错误,这将有助于您查找错误。