Angular v19 prerender uses the wrong package.json
- 主要語言
- TypeScript
- 星號
- 27k
- 分支
- 11.8k
- 平均合併
- 14 小時 23 分鐘
- 30 天內合併 PR
- 162
描述
### Which @angular/* package(s) are the source of the bug?
ssr
### Is this a regression?
No
### Description
when running an angular app that uses `AngularNodeAppEngine` from "@angular/ssr/node" and `outputMode` set to `server` it reads `imports` from `src/package.json` which is set to be used in dist
package.json
```
"imports": {
"#configs/*": "./browser/configs/*.js"
}
```
in the source code the configs folder is live in "src/configs" but copied at build time into "dist/browser/configs"
the same goes for many dynamic imports that assume the app runs inside the dist dir, i.e. the paths may be differ from the corresponding paths in the source code.
The prerender should run the same way as the original app runs i.e. from dist.
another thing, I cannot find an option to totally disable the prerendering as `prerender: false` now has no effect
### Please provide the environment you discovered this bug in (run `ng version`)
```
Angular CLI: 19.2.1
Node: 22.12.0
Package Manager: npm 10.9.0
OS: linux x64
Angular: 19.2.1
... animations, build, cli, common, compiler, compiler-cli, core
... forms, platform-browser, platform-browser-dynamic
... platform-server, router, service-worker, ssr
Package Version
------------------------------------------------------
@angular-devkit/architect 0.1902.1
@angular-devkit/core 19.2.1
@angular-devkit/schematics 19.2.1
@angular/cdk 19.2.2
@angular/material 19.2.2
@schematics/angular 19.2.1
rxjs 7.8.2
typescript 5.8.2
zone.js 0.15.0
```
### Anything else?
_No response_
angular.json
```
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"cms-ui": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
"outputPath": "dist",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.json",
"inlineStyleLanguage": "scss",
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest",
"src/scripts.mjs",
"src/configs"
],
"styles": ["src/styles.scss"],
"scripts": [],
"server": "src/main.server.ts",
"outputMode": "server",
"prerender": false,
"ssr": {
"entry": "src/server.ts"
},
"serviceWorker": "ngsw-config.json",
"define": {},
"namedChunks": true,
"externalDependencies": ["#configs/*"]
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "2m"
},
{
"type": "anyComponentStyle",
"maximumWarning": "2kb"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular/build:dev-server",
"configurations": {
"production": {
"buildTarget": "cms-ui:build:production"
},
"development": {
"buildTarget": "cms-ui:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular/build:extract-i18n",
"options": {
"buildTarget": "cms-ui:build"
}
},
"test": {
"builder": "@angular/build:karma",
"options": {
"polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": "scss",
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest",
"src/scripts.mjs",
"src/configs"
],
"styles": ["src/styles.scss"],
"scripts": []
}
}
}
}
},
"cli": {
"analytics": false
}
}
```
貢獻指南
研究方向
從 @angular/ssr/node 中的 AngularNodeAppEngine 進入點和報告中顯示的 src/package.json 匯入開始,接著追蹤 angular.json 如何透過 src/server.ts 呼叫伺服器輸出和 prerendering。確認解析是從 dist 而不是 src 進行,並確認文件所述的 prerender: false 設定會防止 prerendering。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- angular, node.js, typescript
- 領域
- backend, build-system
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 38/100