在没有 `pubspec.yaml` 文件的情况下,什么决定了我是否选择加入空安全?
In the absence of a `pubspec.yaml` file, what determines whether I'm opting in to null safety?
我知道如果我 cd /tmp
然后 dart create code
,我会在 /tmp/code/pubspec.yaml
中得到 environment:<newline> sdk: '>=2.10.0 <3.0.0'
,这告诉我即使我是 运行ning Dart v. 2.12.3,此(默认)配置默认情况下不会选择空安全。
但是如果我创建一个空目录(mkdir /tmp/code
),生成一个单行程序(echo "String a; " > /tmp/code/prog.dart
),chdir(cd /tmp/code
),然后运行 (dart prog.dart
),dart会在哪里寻找.dart_data/package_config.json
和package_config.json
?
更新
我开始怀疑 pubspec.yaml
的缺失不是 Dart 编程的认可用例。 pubspec.yaml
的存在是安装包的唯一方式,例如 (dart pub add <package-name>
)。我得到的赎金结果(一个目录中有 null 安全;另一个目录中没有)仍然是一个谜,但也许如果 pubspec.yaml
被省略,那么一致性可能要求太高。
您的 .dart_tool/package_config.json
文件中标记的语言版本决定了您是否具有空安全性。如果您的包的语言版本为 2.12 或更高版本,则启用空安全。
当您 运行 dart pub get
或 dart pub upgrade
时,该文件由 Pub 根据您的 pubspec.yaml
文件和您解析的依赖项的 pubspec 文件生成。
每个 Dart 库都可以通过在库的开头添加 //@dart=2.9
注释来覆盖该库的语言版本(以及库的每个零件文件,如果它使用零件)。
如果您没有 package_config.json
文件,当前 默认是查找旧式 .packages
文件。如果找到,则所有语言版本都设置为 2.7,即引入 package_config.json
文件和语言版本控制之前 SDK 的语言版本。 Dart 最终将停止寻找这个旧文件。
( .dart_tool
库和 .packages
文件在你正在 运行 的 Dart 文件的目录中搜索,然后在每个父目录中搜索,直到到达根,或直到找到东西)。
如果也没有找到 .packages
文件,则默认情况下您正在使用编译器支持的 最新 语言版本。
这可能意味着启用了空安全。您可以使用 //@dart=2.9
注释来禁用它(以及所有其他后来的语言功能)。
我知道如果我 cd /tmp
然后 dart create code
,我会在 /tmp/code/pubspec.yaml
中得到 environment:<newline> sdk: '>=2.10.0 <3.0.0'
,这告诉我即使我是 运行ning Dart v. 2.12.3,此(默认)配置默认情况下不会选择空安全。
但是如果我创建一个空目录(mkdir /tmp/code
),生成一个单行程序(echo "String a; " > /tmp/code/prog.dart
),chdir(cd /tmp/code
),然后运行 (dart prog.dart
),dart会在哪里寻找.dart_data/package_config.json
和package_config.json
?
更新
我开始怀疑 pubspec.yaml
的缺失不是 Dart 编程的认可用例。 pubspec.yaml
的存在是安装包的唯一方式,例如 (dart pub add <package-name>
)。我得到的赎金结果(一个目录中有 null 安全;另一个目录中没有)仍然是一个谜,但也许如果 pubspec.yaml
被省略,那么一致性可能要求太高。
您的 .dart_tool/package_config.json
文件中标记的语言版本决定了您是否具有空安全性。如果您的包的语言版本为 2.12 或更高版本,则启用空安全。
当您 运行 dart pub get
或 dart pub upgrade
时,该文件由 Pub 根据您的 pubspec.yaml
文件和您解析的依赖项的 pubspec 文件生成。
每个 Dart 库都可以通过在库的开头添加 //@dart=2.9
注释来覆盖该库的语言版本(以及库的每个零件文件,如果它使用零件)。
如果您没有 package_config.json
文件,当前 默认是查找旧式 .packages
文件。如果找到,则所有语言版本都设置为 2.7,即引入 package_config.json
文件和语言版本控制之前 SDK 的语言版本。 Dart 最终将停止寻找这个旧文件。
( .dart_tool
库和 .packages
文件在你正在 运行 的 Dart 文件的目录中搜索,然后在每个父目录中搜索,直到到达根,或直到找到东西)。
如果也没有找到 .packages
文件,则默认情况下您正在使用编译器支持的 最新 语言版本。
这可能意味着启用了空安全。您可以使用 //@dart=2.9
注释来禁用它(以及所有其他后来的语言功能)。