我正在使用
envied_generator
和 build_runner
包。我想根据环境修改@Envied(path: const String.fromEnvironment('environment'))
内的路径
我通过 VS Code 启动配置启动我的 Flutter 应用程序,该配置会触发预启动任务 (
dart run build_runner build --delete-conflicting-outputs
)。但是, const String.fromEnvironment('environment')
始终返回空值。我尝试使用 --define
标志传递环境变量,但没有成功。
运行
String.fromEnvironment()
时如何正确传递环境变量给build_runner
?
更新:
我的
launch.json
文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Dev-Debug",
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"args": ["--flavor", "dev",
"--dart-define", "environment=dev"],
"preLaunchTask": "build_runner_dev"
}
]
}
我的
tasks.json
文件:
{
"version": "2.0.0",
"tasks": [
{
"label": "build_runner_dev",
"type": "shell",
"command": "dart run build_runner build -- --define=environment=dev",
"group": {
"kind": "build",
"isDefault": true
},
}
]
}
我尝试了上面显示的命令选项:
dart run build_runner build -- --define=environment=dev
并且常量
env
始终为空字符串:
final env = const String.fromEnvironment('environment'); // Empty String
但是,
build_runner
有自己的--define
选项,请参阅构建器的配置如何解决?.
如果您使用例如 enied 生成器来创建自己的构建器,您可以定义一个选项,然后从命令行设置该选项。
在下面的示例中,项目
add_names_builder
中的构建器 researcher_builder
具有如下所示的选项:
targets:
$default:
builders:
# Configure the builder `pkg_name|builder_name`
researcher_builder|add_names_builder:
enabled: true
generate_for:
- 'lib/**'
options:
input_files: 'lib/input/*.dart'
output_file: 'proto/output/researchers.dart'
sort_assets: false
header: '// Header specified in build.yaml.'
footer: '// Footer specified in build.yaml.'
要从我使用的命令行设置选项
footer
:
$ dart run build_runner build --define=researcher_builder:add_names_builder=footer="// Footer set from cmd line"
这将覆盖
build.yaml
文件中设置的构建选项。