Angular CLI 6执行ng build无Server bundles输出问题求助
看起来你遇到的是Angular CLI版本迭代后命令与配置逻辑变化导致的问题——旧版本的--app=ssr参数在Angular 6+的新版CLI中已经被废弃,现在需要通过angular.json中的项目架构配置来指定服务端构建目标。结合你的ASP.NET Core环境,我整理了以下排查和解决步骤:
1. 检查angular.json中的服务端构建配置
首先打开你的angular.json文件,确认项目下是否包含server类型的构建配置:
- 找到
projects -> [你的项目名称] -> architect节点,查看是否存在server配置项。 - 正常的服务端配置应该类似这样:
如果没有这个配置,说明你跳过"server": { "builder": "@angular-devkit/build-angular:server", "options": { "outputPath": "dist/server", "main": "server.ts", "tsConfig": "tsconfig.server.json" }, "configurations": { "production": { "outputHashing": "media", "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ] } } }server.ts和Webpack配置的操作导致服务端构建目标缺失,这是无法生成server bundle的核心原因。
2. 添加或修复服务端构建配置
如果angular.json里没有server配置,建议通过官方CLI命令重新初始化Universal配置(之后再适配ASP.NET Core):
ng add @nguniversal/express-engine
这个命令会自动生成server.ts、tsconfig.server.json,并在angular.json中添加服务端构建目标。
3. 使用正确的命令构建Server Bundle
新版CLI不再支持--app=ssr,你需要用以下命令构建服务端bundle:
ng run [你的项目名称]:server:production
同时,客户端bundle还是用原来的命令:
ng build --prod
你也可以在package.json的scripts里添加组合命令,方便一键构建:
"scripts": { "build:ssr": "ng build --prod && ng run [你的项目名称]:server:production" }
之后直接运行npm run build:ssr就能同时生成客户端和服务端bundle了。
4. 适配ASP.NET Core环境
生成server bundle后,你需要在ASP.NET Core的Startup.cs中配置Prerendering服务,指向生成的server bundle(通常在dist/server/main.js)。确保你已经引用了Microsoft.AspNetCore.SpaServices.Extensions包,然后在Configure方法中添加类似配置:
app.UseSpa(spa => { spa.Options.SourcePath = "ClientApp"; if (env.IsDevelopment()) { spa.UseAngularCliServer(npmScript: "start"); } else { spa.UseSpaPrerendering(options => { options.BootModulePath = $"{spa.Options.SourcePath}/dist/server/main.js"; options.BootModuleBuilder = env.IsDevelopment() ? new AngularCliBuilder(npmScript: "build:ssr") : null; options.ExcludeUrls = new[] { "/sockjs-node" }; }); spa.UseStaticFiles(); spa.UseRouting(); } });
内容的提问来源于stack exchange,提问作者Naveed Ahmed

