Angular 17+SSR项目执行构建命令无限加载无dist输出求助

我开发的Angular 17+SSR全功能电商项目已完成80%,但执行构建命令时出现无限加载状态,无法生成dist输出目录。
配置详情
- Angular CLI: 17.3.8
- Node: 20.9.0
- 包管理器: npm 10.1.0
- 操作系统: win32 x64
angular.json 文件
{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "petszone": { "projectType": "application", "schematics": { "@schematics/angular:component": { "style": "scss" } }, "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/petszone", "index": "src/index.html", "browser": "src/main.ts", "allowedCommonJsDependencies": [ "undici" ], "polyfills": [ "zone.js" ], "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.scss" ], "scripts": [], "server": "src/main.server.ts", "prerender": true, "ssr": { "entry": "server.ts" } }, "configurations": { "production": { "budgets": [ { "type": "initial", "maximumWarning": "1mb", "maximumError": "2mb" }, { "type": "anyComponentStyle", "maximumWarning": "200kb", "maximumError": "400kb" } ], "outputHashing": "all" }, "development": { "optimization": false, "extractLicenses": false, "sourceMap": true, "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.development.ts" } ] } }, "defaultConfiguration": "production" }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { "buildTarget": "petszone:build:production" }, "development": { "buildTarget": "petszone:build:development" } }, "defaultConfiguration": "development" }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { "buildTarget": "petszone:build" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { "polyfills": [ "zone.js", "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", "inlineStyleLanguage": "scss", "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.scss" ], "scripts": [] } } } } }, "cli": { "analytics": false } }
package.json 文件
{ "name": "petszone", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "build:prod": "ng build --watch --configuration=production", "watch": "ng build --watch --configuration development", "test": "ng test" }, "private": true, "dependencies": { "@angular/animations": "^17.0.0", "@angular/common": "^17.0.0", "@angular/compiler": "^17.0.0", "@angular/core": "^17.0.0", "@angular/fire": "^17.0.1", "@angular/forms": "^17.0.0", "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/platform-server": "^17.0.0", "@angular/router": "^17.0.0", "@angular/ssr": "^17.0.0", "@fortawesome/fontawesome-free": "^6.5.1", "@google-pay/button-angular": "^3.1.0", "express": "^4.18.2", "rxjs": "~7.8.0", "swiper": "^11.0.7", "tslib": "^2.3.0", "zone.js": "~0.14.2" }, "devDependencies": { "@angular-devkit/build-angular": "^17.0.0", "@angular/cli": "^17.0.0", "@angular/compiler-cli": "^17.0.0", "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", "autoprefixer": "^10.4.16", "jasmine-core": "~5.1.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "postcss": "^8.4.33", "tailwindcss": "^3.4.1", "typescript": "~5.2.2" } }
排查解决步骤
修正生产构建命令
当前build:prod命令带了--watch参数,该参数会让构建持续监听文件变化,不会自动终止,导致看起来像“无限加载”。修改package.json中的脚本:"build:prod": "ng build --configuration=production"先禁用预渲染验证基础构建
配置中开启了prerender: true,预渲染阶段若遇到路由无法解析、异步请求卡住等问题,会导致构建挂起。先修改angular.json的build.options,将prerender设为false,执行ng build看是否能正常生成dist目录。如果可以,再逐步排查预渲染问题:检查所有路由组件是否支持SSR、是否有未处理的异步操作(比如未返回的Promise)。统一Angular依赖版本
Angular CLI版本为17.3.8,但核心依赖停留在17.0.0,版本不匹配可能引发构建异常。执行命令统一升级:ng update @angular/core@17.3.8 @angular/cli@17.3.8查看详细构建日志
执行构建时添加--verbose参数,定位卡住的具体阶段:ng build --verbose检查server.ts文件
确保服务器入口文件中没有无限循环、未处理的Promise或阻塞代码,比如是否正确处理了Express请求,没有卡在中间件环节。
内容的提问来源于stack exchange,提问作者Berlin Johns. M
相关产品推荐
相关产品推荐

