在项目文件夹外运行dart脚本



我正试图用dart取代python作为我的工具的脚本语言。我可以在任何地方创建一个python文件,导入全局包并运行它,但我似乎无法用dart实现这一点。我总是需要一个pubspec.yaml文件来运行dart脚本吗?

这是我试图运行的脚本:

import 'package:http/http.dart' as http;
main(List<String> args) async{
var res = await http.get('https://example.com');
print(res.headers);
}

这是我得到的错误:

Error: Could not resolve the package 'http' in 'package:http/http.dart'.
test2.dart:1:8: Error: Not found: 'package:http/http.dart'
import 'package:http/http.dart' as http;
^
test2.dart:4:19: Error: Method not found: 'get'.
var res = await http.get('https://example.com');

不,您不需要一个pubspec.yaml文件来运行程序,但它确实需要能够以某种方式解析所有导入。

pubspec.yaml文件用于获取包(从pub.dev、git存储库等(,但不用于在运行时查找包。pub程序读取pubspec.yaml文件并下载其中提到的包,并维护一个包规范文件,指明每个包解析到的位置。默认情况下,包规范位于名为.packages的文件中,该文件与publicspec.yaml文件位于同一目录中。Dart运行时通常通过查看.packages包规范文件来查找包,但也有其他方法。

以下是一些选项:

  1. .packages文件放在与Dart程序相同的目录中,或放在祖先目录中。

  2. 使用--packages选项指定要使用的包规范文件:

    dart --packages=/home/username/stuff/mypackagespecfile  myprogram.dart
    
  3. Dart运行时还有一个--package-root选项。但我还没想好如何让它发挥作用。

  4. import语句使用URI,因此import 'file://...';在某些情况下也可以工作。

  5. 使用dart2native将程序编译为可执行文件。


注意:Dart脚本也可以以哈希爆炸线开始:

#!/usr/bin/env dart
import 'package:http/http.dart' as http;
main(List<String> args) async{
var res = await http.get('https://example.com');
print(res.headers);
}

然后,您可以使程序可执行并运行,而无需在Dart运行时中键入:

$ chmod a+x myprogram.dart
$ ./myprogram.dart

最新更新