Angular v19 prerender uses the wrong package.json
- Linguagem predominante
- TypeScript
- Estrelas
- 27k
- Forks
- 11.8k
- Merge médio
- 14h 23min
- PRs com merge (30d)
- 162
Descrição
### 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
}
}
```
Guia de contribuição
Direção de pesquisa
Comece pelo ponto de entrada AngularNodeAppEngine de @angular/ssr/node e pelos imports de src/package.json mostrados no relatório; em seguida, rastreie como angular.json invoca a saída do servidor e o prerendering por meio de src/server.ts. Verifique se a resolução ocorre a partir de dist, e não de src, e se a configuração documentada prerender: false impede o prerendering.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- angular, node.js, typescript
- Domínio
- backend, build-system
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 38/100