在 .Net Core 2.0 和 Angular 中使用 'dotnet publish' 时找不到模块 'aspnet-webpack'
Cannot find module 'aspnet-webpack' when using 'dotnet publish' in .Net Core 2.0 & Angular
我一直在努力寻找这个问题的答案,但无济于事。我正在尝试使用命令行命令发布我的 .Net Core 2.0 和 Angular 项目 'dotnet publish' 我成功了发布,但是当尝试 运行 我的项目的 .dll 在发布的文件夹中时,我的项目在开发环境中 运行 时吐出这个错误:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Webpack dev middleware failed because of an error while loading 'aspnet-webpack'. Error was: Error: Cannot find module 'aspnet-webpack'
当 运行 在生产环境中并允许 DeveloperExceptionPage(如下面我的 statup.cs 所示).netcore 应用程序 运行s,但在实际的网络应用程序中崩溃,我假设是由于较大的错误,未找到 aspnet-webpack:
NodeInvocationException: Uncaught (in promise): Error: No component factory found for HomeComponent. Did you add it to @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(我相信是八月更新?)生成的默认 Angular 项目,它似乎只使用 Webpack。问题似乎是项目的生产配置需要一个我没有提供的参考,但我不明白为什么会这样。
到目前为止,这个问题的其他答案对我没有帮助,所以如果这是一个重复的问题,我深表歉意。
我和“aspnet-webpack
”有同样的问题,这是在项目开发的中途引入的,所以我有点惊讶地看到解决方案突然死亡。在 IIS 上几个月一切正常,但突然无法启动。
IIS 日志文件没有帮助,所以我尝试了解决这两种方法,其中一种有效。 快点!
解决方案
我 运行 关注包管理器 window :
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
喜欢寻找更多细节,但暂时没有详细说明为什么需要特定版本。
在您发布 .Net Core 2.0 和 Angular 项目之后,在您 运行 它之前,您需要确保环境变量 ASPNETCORE_ENVIRONMENT 未设置为 Development .已发布的项目不包括对 WebpackDevMiddleware 或 HotModuleReplacement 的支持。但如果环境设置为开发,它将尝试使用它们。
HotModuleReplacement 会在源文件更改时自动更新 Web 浏览器中的 Webpack 构建资源(例如 JavaScript、CSS 或图像)。这显然是您在生产中不希望看到的。
如果 ASPNETCORE_ENVIRONMENT 设置为 "Development",您可以更改设置:
setx ASPNETCORE_ENVIRONMENT "Production"
您需要关闭当前命令 window 并打开另一个命令以查看更改。
你也可以在startup.cs中注释掉下面的代码来达到同样的效果:
#if DEBUG
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
#endif
检查 node.js 是否安装在生产环境中并且在路径中。
Node.js被webpack使用
同时检查您是否有最新版本的 Node.js (4+)
参考:
Node.js 的版本可以用 :
检查
where.exe node.exe (Windows 7+)
which node.exe (linux bash)
当然,路径环境变量如果指向过时的Node.js
,则应检查和更新
祝一切顺利
我在没有 Angular 的项目中遇到了与您相同的错误:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Webpack dev middleware failed because of an error while loading 'aspnet-webpack'. Error was: Error: Cannot find module 'aspnet-webpack'
结果是一个我容易忘记的节点的简单问题。
npm install
请记住,npm 命令需要 运行 在包含 package.json 文件的顶级目录中。我希望这能帮助那些和我一样有很多问题的人记住 运行 npm 命令。感谢论坛提醒我:
https://www.ebenmonney.com/forum/?view=thread&id=20&part=1#postid-57
确保您已完全安装所有这些依赖项:
npm install webpack-hot-middleware --save-dev
npm install webpack-dev-middleware --save-dev
npm install aspnet-webpack --save-dev
在我的例子中,原因是 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")
});
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 "Development"
出现此错误的主要原因是您在代码中的某处使用了依赖项,但您的解决方案中并未安装该依赖项。如果您正在使用 visual studio,请尝试使用干净构建,它会显示您项目中的错误,这将帮助您找到它。
我一直在努力寻找这个问题的答案,但无济于事。我正在尝试使用命令行命令发布我的 .Net Core 2.0 和 Angular 项目 'dotnet publish' 我成功了发布,但是当尝试 运行 我的项目的 .dll 在发布的文件夹中时,我的项目在开发环境中 运行 时吐出这个错误:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Webpack dev middleware failed because of an error while loading 'aspnet-webpack'. Error was: Error: Cannot find module 'aspnet-webpack'
当 运行 在生产环境中并允许 DeveloperExceptionPage(如下面我的 statup.cs 所示).netcore 应用程序 运行s,但在实际的网络应用程序中崩溃,我假设是由于较大的错误,未找到 aspnet-webpack:
NodeInvocationException: Uncaught (in promise): Error: No component factory found for HomeComponent. Did you add it to @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(我相信是八月更新?)生成的默认 Angular 项目,它似乎只使用 Webpack。问题似乎是项目的生产配置需要一个我没有提供的参考,但我不明白为什么会这样。
到目前为止,这个问题的其他答案对我没有帮助,所以如果这是一个重复的问题,我深表歉意。
我和“aspnet-webpack
”有同样的问题,这是在项目开发的中途引入的,所以我有点惊讶地看到解决方案突然死亡。在 IIS 上几个月一切正常,但突然无法启动。
IIS 日志文件没有帮助,所以我尝试了解决这两种方法,其中一种有效。 快点!
解决方案
我 运行 关注包管理器 window :
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
喜欢寻找更多细节,但暂时没有详细说明为什么需要特定版本。
在您发布 .Net Core 2.0 和 Angular 项目之后,在您 运行 它之前,您需要确保环境变量 ASPNETCORE_ENVIRONMENT 未设置为 Development .已发布的项目不包括对 WebpackDevMiddleware 或 HotModuleReplacement 的支持。但如果环境设置为开发,它将尝试使用它们。
HotModuleReplacement 会在源文件更改时自动更新 Web 浏览器中的 Webpack 构建资源(例如 JavaScript、CSS 或图像)。这显然是您在生产中不希望看到的。
如果 ASPNETCORE_ENVIRONMENT 设置为 "Development",您可以更改设置:
setx ASPNETCORE_ENVIRONMENT "Production"
您需要关闭当前命令 window 并打开另一个命令以查看更改。
你也可以在startup.cs中注释掉下面的代码来达到同样的效果:
#if DEBUG
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
#endif
检查 node.js 是否安装在生产环境中并且在路径中。
Node.js被webpack使用
同时检查您是否有最新版本的 Node.js (4+)
参考:
Node.js 的版本可以用 :
检查where.exe node.exe (Windows 7+)
which node.exe (linux bash)
当然,路径环境变量如果指向过时的Node.js
,则应检查和更新祝一切顺利
我在没有 Angular 的项目中遇到了与您相同的错误:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Webpack dev middleware failed because of an error while loading 'aspnet-webpack'. Error was: Error: Cannot find module 'aspnet-webpack'
结果是一个我容易忘记的节点的简单问题。
npm install
请记住,npm 命令需要 运行 在包含 package.json 文件的顶级目录中。我希望这能帮助那些和我一样有很多问题的人记住 运行 npm 命令。感谢论坛提醒我:
https://www.ebenmonney.com/forum/?view=thread&id=20&part=1#postid-57
确保您已完全安装所有这些依赖项:
npm install webpack-hot-middleware --save-dev
npm install webpack-dev-middleware --save-dev
npm install aspnet-webpack --save-dev
在我的例子中,原因是 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")
});
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 "Development"
出现此错误的主要原因是您在代码中的某处使用了依赖项,但您的解决方案中并未安装该依赖项。如果您正在使用 visual studio,请尝试使用干净构建,它会显示您项目中的错误,这将帮助您找到它。