I'm developing an angular app, and it's recommended to use generated code for a lot of things running in production, namely template caches, expression caches, and a static DI injector. There's currently no nice way to switch between different build configurations, so I'm using the pattern recommended here:
In lib/main.dart you can see initializer-prod.dart file being imported, which has initializer-dev.dart counterpart. Switching between those two file will allow you to switch between prod and dev modes. You will need to run the generator script before using the prod mode.
This results in the following import:
//import 'initializer_prod.dart' as init; // Use in prod/test.
import 'initializer_dev.dart' as init; // Use in dev.
As you can see, switching the import is a manual process. Is there a better, more automatic way to achieve this?
I see two possibilities (haven't tried any of these myself yet)
or
Recently a feature should have been added that pub build allows adding an environment variables using a command line option (like dart2js's -d)
Some links about transformers:
EDIT
I was able to configure
dart2js
options in pubspec.yaml likeThey are validate and
pub build
fails if an unknown option is provided or if it's not the expected format (yaml list
for commandLineOptions,yaml map
form environment)BUT
String.fromEnvironment()
didn't get a valueAccording to this issue, this is supported: Passing in arguments to dart2js during pub build
I filed a bug How to pass options to dart2js from pubspec.yaml
EDIT-2
I tried it and it is working now:
access it from the code like
see also Configuring the Built-in dart2js Transformer
EDIT-3
Another way is to use
assert
to set variables.assert
is ignored in production.