从任意文件导入类

时间:2017-06-05 20:14:47

标签: dart

假设 global_bin ,一个通过

激活的包&#s / bin文件
pub global activate global_bin

我需要 global_bin 在位于执行它的目录中的包中搜索包含类定义的文件,然后实例化它。

即。 :

// $HOME/package/lib/class.dart
class Clazz{
  int number = 42;
}

然后在命令行中:

cd $HOME/package
global_bin --echo number
# 42

1 个答案:

答案 0 :(得分:3)

您无法在同一个隔离中加载任意库。需要探索的两件事:

1)使用https://api.dartlang.org/stable/1.23.0/dart-isolate/Isolate/spawnUri.html生成一个新的分离 - 你给spawnUri一个新的入口点,它可以在任何文件中,并加载新的dart代码。

2)听起来你正在寻找加载未准备好在隔离区中运行的代码 - 没有自己的“主”方法。所以你必须生成代码。在您的示例中,您将需要生成导入Clazz的代码,导入将按名称查找符号的引擎,然后运行它:

import 'package:foo/class.dart';
import 'package:global_bin/runner.dart' as runner;

void main() {
   runner.run();
}

现在你的runner.dart可以使用镜像来查找class.dart并检查它。

最后,为了实际查找文件 - 你可以使用dart的标准文件函数,即dart:io。