通过导入调用脚本的Dart脚本

通过导入调用脚本的Dart脚本,dart,Dart,我有以下设置: ├── bin │   ├── all.dart │   ├── details │   │   ├── script1.dart │   │   └── script2.dart | | ..... all.dart只需导入script1.dart和script2.dart,并调用它们的main。我们的目标是在详细信息下提供一组可以单独运行的脚本。此外,我还需要一个单独的all.dart脚本,可以同时运行它们。这将使调试单个脚本变得更简单,但仍然允许所有脚本运行 好

我有以下设置:

├── bin
│   ├── all.dart
│   ├── details
│   │   ├── script1.dart
│   │   └── script2.dart
|   |    .....
all.dart只需导入script1.dart和script2.dart,并调用它们的main。我们的目标是在详细信息下提供一组可以单独运行的脚本。此外,我还需要一个单独的all.dart脚本,可以同时运行它们。这将使调试单个脚本变得更简单,但仍然允许所有脚本运行

好的,飞镖

将'details/script1.dart'导入为script1;
将“details/script2.dart”作为script2导入;
main(){
script1.main();
script2.main();
}
脚本1.省道

main()=>print('script1 run');
脚本2.省道

main()=>print('script2 run');
因此,这是可行的,我看到运行all.dart时预期的打印语句,但我有两个问题

首先,我必须在详细信息下链接软件包。显然,pub不会将软件包软链接传播到子文件夹。这是预期的还是有解决办法

其次,在第二条import语句处的all.dart中标记了错误。分析器错误为:

导入的库“script1.dart”和“script2.dart”不应具有相同的名称“”
所以我的猜测是,因为我正在导入其他脚本,就像它们是库一样,而且它们没有库脚本[12];语句的顶部,它们都有相同的名称-空名称

注意:最初我将所有这些都放在lib下,我可以将它们作为脚本运行,在命令行上指定合适的--package根目录,即使它们是带有main的库。但为了调试,我需要在Dart编辑器中运行,这就是为什么我要将它们移动到bin。也许编辑器应该允许带有main的lib下的库作为脚本运行,因为它们可以在编辑器外部运行?脚本/库之间的实际差异似乎有点不必要(因为其他脚本语言允许文件同时存在)


我该怎么清理呢?

我不确定实际的问题是什么

  • 如果库没有library语句,则使用空字符串作为名称。 只需添加一个具有唯一名称的库语句即可解决此问题

  • 将符号链接添加到子目录可以解决子目录中脚本导入的问题。 我经常这样做。
    dartbug.com上多次提到符号链接应该完全消失,但我不知道这需要多长时间

  • 我从未尝试在
    lib
    中放置带有main的脚本文件,但这与包布局约定背道而驰,我想这就是DartEditor不支持它的原因


如何清除警告和无软链接?在第三点上,它涉及到脚本和lib之间的真正区别问题。为什么对带有main的库感到不安,而对带有main(按照包布局约定不是lib)的脚本不感到不安,因为它需要在顶部使用library语句来消除警告?不确定编辑器如何确定它是否可以运行;但一个解决方案是编辑器检查main,如果存在,则运行“dart--package root”设置为“package”包文件夹。然后,不需要软链接,任何带有is-main(甚至是库)的内容也可以作为脚本运行。我不知道
lib
,但否则您应该能够为脚本创建启动配置,并添加自定义参数,如
--package root
。有点麻烦,因为每个文件都需要配置。规范化AFAIK需要唯一的库名。不,太多了。我将坚持使用脚本的内部命名(libs)和软链接,因为它可以在没有分析警告的情况下工作。我有一个具有类似需求的项目,并且也是这样做的。