Provide Angular build context to external tool configuration files #20253
Labels
Milestone
Comments
We could mitigate this concern by requiring all environment variables to begin with |
|
https://github.com/tailwindlabs/tailwindcss-jit Just want to bring this to you guys' attention that is Tailwind JIT is in the work. As soon as this is stable, the need for Purging is obsolete. Although, there will be option from the Tailwind side to go back to AOT mode which, again, requires Purge functionality. So I guess this issue is still relevant |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Command (mark with an
x)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 productionto 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.
NG_BUILD_CONFIGS="foo,bar,baz". Then config files could do something like: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🤷♂️ . 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.
angular.json. That seems weird to me, but arguably it's a benefit soenvoption inangular.json. Each configuration in theangular.jsonfile could include anenvmap that looks like: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:
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
PATHor other system variables) and breaking the CLI.MY_BUILD_ENV="production" ng build --configuration productionThen use that variable in the tool config just like previously:
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 productionto do everything it needs to, and then be surprised something didn't optimize because they didn't setMY_BUILD_ENV="production". Projects could wrap such a command into annpm run build:prodwhich 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.
The text was updated successfully, but these errors were encountered: