angular / angular/angular-cli

Angular v19 prerender uses the wrong package.json

Aberta
#29,787 3 comentários 1 reação 0 responsáveis Ver no GitHub
angular/build:application area: @angular/build area: @angular/ssr freq1: low type: bug/fix
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

Abrir o 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

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.