目錄

使用編譯環境宣告配置應用程式

您可以在建置或執行 Dart 應用程式時指定編譯環境宣告。編譯環境宣告會將配置選項指定為鍵值對,這些鍵值對會在編譯時被存取和評估。

您的應用程式可以使用環境宣告的值來變更其功能或行為。Dart 編譯器可以使用環境宣告值,消除因控制流程而無法到達的程式碼。

您可能會定義和使用環境宣告來

  • 在偵錯期間新增功能,例如啟用記錄。
  • 建立應用程式的個別風味。
  • 配置應用程式行為,例如 HTTP 伺服器的埠。
  • 啟用應用程式的實驗模式以進行測試。
  • 在測試和生產後端之間切換。

若要在執行或編譯 Dart 應用程式時指定環境宣告,請使用 --define 選項或其縮寫 -D。使用 <NAME>=<VALUE> 格式指定宣告鍵值對

$ dart run --define=DEBUG=true -DFLAVOR=free

若要了解如何使用其他工具設定這些宣告,請查看本指南中的指定環境宣告章節。該章節說明宣告語法,以及如何在命令列和 IDE 和編輯器中指定它們。

存取環境宣告

#

若要存取指定的環境宣告值,請將其中一個 fromEnvironment 建構子與 const 或在常數上下文中搭配使用。使用 bool.fromEnvironment 來表示 truefalse 值,使用 int.fromEnvironment 來表示整數值,以及使用 String.fromEnvironment 來表示其他任何值。

每個 fromEnvironment 建構子都需要環境宣告的名稱或鍵。它們也接受一個可選的 defaultValue 具名引數,以覆寫預設的回退值。當未定義宣告或無法將指定的值剖析為預期的型別時,會使用預設的回退值。

例如,如果您只想在環境宣告 DEBUG 設定為 true 時列印記錄訊息

dart
void log(String message) {
  // Log the debug message if the environment declaration 'DEBUG' is `true`.
  // If there was no value specified, do not log.
  if (const bool.fromEnvironment('DEBUG', defaultValue: false)) {
    print('Debug: $message');
  }
}

在此程式碼片段中,如果 DEBUG 在編譯期間設定為 false,或根本未指定,生產編譯器可以完全移除條件及其主體。

當未指定宣告或無法剖析指定的值時,fromEnvironment 建構子會回退為預設值。因此,若要特別檢查是否已指定環境宣告,請使用 bool.hasEnvironment 建構子

dart
if (const bool.hasEnvironment('DEBUG')) {
  print('Debug behavior was configured!');
}

指定環境宣告

#

Dart CLI

#

dart rundart compile 子命令都接受任意數量的 -D--define 選項,以指定環境宣告值。

$ dart run --define=DEBUG=true -DFLAVOR=free main.dart
$ dart compile exe --define=DEBUG=true -DFLAVOR=free main.dart
$ dart compile js --define=DEBUG=true -DFLAVOR=free main.dart
$ dart compile aot-snapshot --define=DEBUG=true -DFLAVOR=free main.dart
$ dart compile jit-snapshot --define=DEBUG=true -DFLAVOR=free main.dart
$ dart compile kernel --define=DEBUG=true -DFLAVOR=free main.dart

webdev

#

若要了解如何配置 webdev 以將環境宣告傳遞給開發和生產網路編譯器,請查看webdev 配置文件

Visual Studio Code

#

在您的啟動配置 (launch.json) 的 configurations 下,新增一個包含您所需環境宣告的新 toolArgs

json
"configurations": [
    {
        "name": "Dart",
        "request": "launch",
        "type": "dart",
        "toolArgs": [
          "--define=DEBUG=true"
        ]
    }
]

若要了解詳情,請查看 VS Code 啟動配置的文件

JetBrains IDE

#

在您專案的執行/偵錯配置中,將所需的環境宣告新增至VM 選項

Adding define option to Jetbrains IDE

若要了解詳情,請查看 JetBrains 的 Dart 執行/偵錯配置文件

Flutter

#

若要指定 Flutter 工具的環境宣告,請改用 --dart-define 選項

$ flutter run --dart-define=DEBUG=true