我在我的 dart cli 项目中安装了包 dotenv,它似乎与 DotEnv()..load() 一起工作得很好,并使用 dart run bin/my_cli.dart 运行 bin dart 文件。但是一旦我用 dart
pub global activate
激活我的包,它就会停止工作并且找不到 env 文件。
当我查看 .pub-cache/global_packages 文件夹时,我注意到 .env 文件不存在。那么如何通过 .env 文件将我的自定义环境变量包含在全局安装的 dart cli 包中?
以下是使用 dart 命令行工具和全局包时的命令列表:
dart pub global activate <package>
例如,假设您想使用 webdev 从命令行为您的 Dart Web 应用程序提供服务。
$ dart pub global activate webdev
$ webdev serve
dart pub global activate [--noexecutables] [--executable=<name>] [--overwrite] <package> [version-constraint]
如果这不起作用,您可能需要设置您的路径。
$ dart pub global activate --source path <path>
使用 activate --source path 激活本地的包 机器。以下示例激活秒表包 ~/dart 目录:
$ dart pub global activate --source path ~/dart/stopwatch
dart pub global deactivate <package>
dart pub global list
dart pub global run
$ dart pub global run <package>:<executable> [args...]
来源:VS Code IDE 生成的输出,来自
dart pub global -h
,有关更多信息:dart pub global
有关
dart pub add <package>
命令的有用信息:
默认情况下,dart pub add 使用最新稳定版本的包 来自与您的 SDK 限制兼容的 pub.dev 网站,并且 依赖关系。例如,如果 0.13.3 是最新的稳定版本 http包,然后 dart pub add http 添加 http: ^0.13.3 下 pubspec.yaml 中的依赖项。来源:dart pub add
我做了什么:
PS C:\path_to_my_dart_cli_project\my_dart_cli_project>flutter pub add dotenv
如果确实有必要,我希望有人验证这一点,因为我们正在处理全局设置,因为我在使用 Dart 命令行工具方面没有丰富的经验。
dart pub global activate dotenv
dart pub global run dotenv:new # create a .env file and add it to .gitignore
dart pub global run dotenv # load the file and print only the file environment variables to stdout
我在 .env 文件中添加了一些值,即
ENV_DATA=FIRST_VALUE
。
然后,我得到了这个输出:
{ENV_DATA: FIRST_VALUE}
令人惊讶的是,在我的 test\my_dart_cli_project.dart 文件中,我这样做了:
import 'dart:io';
// import 'package:dotenv/dotenv.dart';
void main() {
// var env = DotEnv(includePlatformEnvironment: true)..load();
// p('read all vars? ${env.isEveryDefined(['foo', 'baz'])}');
// p('foo=${env['foo']}');
// p('baz=${env['baz']}');
// p('your home directory is: ${env['HOME']}');
// env.clear();
// p('cleared!');
// p('env has key foo? ${env.isDefined('foo')}');
// p('env has key baz? ${env.isDefined('baz')}');
// p('your home directory is still: ${env['HOME']}');
}
// p(String msg) => stdout.writeln(msg);
我仍然得到输出
{ENV_DATA: FIRST_VALUE}
,所以我将留给您根据您的用例进行自定义。