Angular Universal运行npm run dev:ssr找不到server/main.js如何解决?
问题根因
你遇到的错误核心是SSR服务启动时,在预期路径下找不到服务端构建产物main.js,常见触发原因如下:
- angular.json中SSR相关构建配置的输出路径和运行时读取路径不匹配
- tsconfig.server.json的输出目录配置和angular.json配置冲突
- 使用了Angular 9+版本已经废弃的
module-map-ngfactory-loader依赖,导致构建流程异常 - Node.js奇数版本(你当前用的v15)存在兼容性问题
解决方案
按以下步骤逐一排查修复:
- 修正angular.json配置
找到项目根目录angular.json文件,定位到projects > multikart > architect节点,确认server和serve-ssr配置符合以下规范:
"server": { "builder": "@angular-devkit/build-angular:server", "options": { "outputPath": "dist/multikart/server", "main": "server.ts", "tsConfig": "tsconfig.server.json", "inlineStyleLanguage": "scss" } }, "serve-ssr": { "builder": "@nguniversal/builders:ssr-dev-server", "options": { "browserTarget": "multikart:build", "serverTarget": "multikart:server", "port": 4200 } }
重点确认server.options.outputPath的值为dist/multikart/server,和错误提示中查找的路径一致。
- 清理tsconfig.server.json冗余配置
删除tsconfig.server.json中compilerOptions.outDir配置项,Angular SSR构建会优先读取angular.json中的outputPath配置,冲突的outDir会导致产物输出到错误目录。修正后配置参考:
{ "extends": "./tsconfig.app.json", "compilerOptions": { "types": [ "node" ], "target": "es2016" }, "files": [ "src/main.server.ts", "server.ts" ], "angularCompilerOptions": { "entryModule": "./src/app/app.server.module#AppServerModule" } }
- 移除废弃依赖相关代码
Angular 9及以上版本默认使用Ivy编译器,原生支持懒加载,不需要module-map-ngfactory-loader:
- 从
app.server.module.ts中移除ModuleMapLoaderModule的导入和imports数组中的引用 - 从
server.ts中移除LAZY_MODULE_MAP的声明和provideModuleMap(LAZY_MODULE_MAP)配置
验证构建产物
先执行npm run build:ssr,完成后检查dist/multikart/server目录下是否存在main.js文件,存在的话再执行npm run dev:ssr即可正常启动。可选:替换Node.js版本
建议将Node.js版本替换为14.x或16.x的LTS版本,避免奇数版本的兼容性问题。
内容的提问来源于stack exchange,提问作者Herval NGANYA
相关产品推荐
相关产品推荐

