You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular CLI 6执行ng build无Server bundles输出问题求助

解决Angular Universal在ASP.NET Core环境下无法生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:18:43