Provide Angular build context to external tool configuration files
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- angular, tailwindcss, typescript
- Domaine
- build-system, cli, tooling
Piste de recherche
Commencez par examiner comment ng build lit les options et les configurations de build dans angular.json, puis lisez la discussion associée sur PurgeCSS dans #20015. L’issue nécessite de trancher entre les approches proposées fondées sur des variables d’environnement avant de pouvoir commencer l’implémentation ; elle sera considérée comme terminée lorsqu’une conception approuvée, une sémantique de configuration documentée et une couverture du fusionnement des configurations et du comportement de la plateforme seront disponibles.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🚀 Feature request
Command (mark with an x)
- build
Description
Spin off from PurgeCSS discussion in #20015.
It would be nice for external tool configuration files (like Tailwind) to have some knowledge about the Angular build context in order to conditionalize their configurations. This could allow ng build --configuration production to change the config used by other tools and affect their builds as well. This allows other tools in a project to be more intelligent about the intent of a build and do what the user expects.
Describe the solution you'd like
There are a couple possible implementations of this.
- Set an environment variable like
NG_BUILD_CONFIGS="foo,bar,baz". Then config files could do something like:
const enableOptimizations = process.env['NG_BUILD_CONFIGS'].split(',').includes('production');
This would decouple the Angular CLI from any specific tools and allow the individual tool configs to define the semantics for each configuration. Similarly, the semantics for each configuration are also defined directly in the tool's config file rather than angular.json. That seems weird to me, but arguably it's a benefit so 🤷♂️. It also means that the config needs some knowledge of Angular, which isn't too bad considering its in the config, not the tool library, but this can still be undesirable.
- Add an
envoption inangular.json. Each configuration in theangular.jsonfile could include anenvmap that looks like:
{
"projects": {
"my-project": {
"architect": {
"build": {
"options": {
"env": {
"MY_BUILD_ENV": "development",
},
},
},
"configurations": {
"production": {
"env": {
"MY_BUILD_ENV": "production",
},
},
},
},
},
},
}
The Angular CLI would parse and set the relevant environment variables during a build. Then tool configs could look for the project-specific environment variables like so:
const enableOptimizations = process.env['MY_BUILD_ENV'] === 'production';
This would still give users full control over the semantics of any given environment variable and they can choose its value on a per-configuration basis. The challenges here include merging multiple configuration environment variables which might conflict and that this environment would apply to all tools used by the Angular CLI. Users might also break something by setting a variable they probably shouldn't (such as PATH or other system variables) and breaking the CLI.
- Just have users set the environment variable on the command line:
MY_BUILD_ENV="production" ng build --configuration production
Then use that variable in the tool config just like previously:
const enableOptimizations = process.env['MY_BUILD_ENV'] === 'production';
This requires no effort on the Angular CLI side and users can do this today. The downside here is that it requires special knowledge of how to build a particular app. A new developer would reasonably expect ng build --configuration production to do everything it needs to, and then be surprised something didn't optimize because they didn't set MY_BUILD_ENV="production". Projects could wrap such a command into an npm run build:prod which sets the variable, but not everyone will use it. This is also a cross platform issue, as I don't think there is a Unix and Windows compatible way of doing this (see this question), so supporting both environment for build is more hassle for the user.
There are likely other possible implementations that have their own trade offs. We'll need to discuss this more and come to a decision on how to move forward here.
- Langage dominant
- TypeScript
- Étoiles
- 27k
- Forks
- 11.8k
- Merge moyen
- 16 h 35 min
- PR mergées (30 j)
- 176
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de angular/angular-cli
-
Can't use an array of hostnames in --allowedHosts cli parameter in @angular/build:dev-server Ouvertearea: @angular/build gemini-triaged
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
angular/angular-cli#33955 ·
-
area: @angular/cli gemini-triaged
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
angular/angular-cli#33055 · 1 commentaire · 3 réactions ·
-
unit-test: with --coverage, a setup file's hooks reach only the first spec file of each worker Ouvertearea: @angular/build gemini-triaged
Difficulté 4/5 3-5 jours Accessibilité débutants 72/100
angular/angular-cli#34137 ·
-
angular/build:library area: @angular/build gemini-triaged
angular/angular-cli#34131 · 1 personne assignée ·
-
angular/build:library area: @angular/build gemini-triaged
angular/angular-cli#34130 · 1 personne assignée ·
Toutes les issues de angular/angular-cli
Issues similaires
-
[Bug]: Discord Activity titles with emoji are rejected as over 80 characters when they are not Ouverteclawsweeper:linked-pr-open clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:message-loss issue-rating: 🦞 diamond lobster maturity:stable P2
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Eynzof/Hermes-CN-Desktop#616 ·
-
ZCode 3.14.3 に対応する Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
supermomonga/zcode-acp#24 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
growthbook/growthbook#7100 ·
-
triage
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100