运行 dart run build_runner 时如何将环境变量传递给 String.fromEnvironment()

问题描述 投票:0回答:1

我正在使用

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
          },
      }
  ]
}
flutter dart dart-define
1个回答
0
投票

我尝试了上面显示的命令选项:

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
文件中设置的构建选项。

© www.soinside.com 2019 - 2024. All rights reserved.