【问题标题】:Dart scripts that invoke scripts by importing them通过导入脚本来调用脚本的 Dart 脚本
【发布时间】:2014-11-27 00:38:36
【问题描述】:

我有这个设置:

├── bin
│   ├── all.dart
│   ├── details
│   │   ├── script1.dart
│   │   └── script2.dart
|   |    .....

all.dart 只需导入 script1.dartscript2.dart 并调用它们的 main。目标是在 details 下有一堆可以单独运行的脚本。此外,我想要一个单独的 all.dart 脚本,可以一次运行它们。这将使调试单个脚本更简单,但仍然允许所有脚本运行。

all.dart

import 'details/script1.dart' as script1;
import 'details/script2.dart' as script2;

main() {
  script1.main();
  script2.main();
}

script1.dart

main() => print('script1 run');

script2.dart

main() => print('script2 run');

所以,这是有效的,我在运行 all.dart 时看到了预期的打印语句,但我有两个问题。

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

其次,在第二个 import 语句的位置 all.dart 中标记了错误。分析仪错误是:

The imported libraries 'script1.dart' and 'script2.dart' should not have the same name ''

所以我的猜测是因为我正在导入其他脚本,就好像它们是库一样,并且因为它们没有 library script[12]; 语句在顶部,它们都具有相同的名称 -空名?

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

我该如何清理?

【问题讨论】:

    标签: dart


    【解决方案1】:

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

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

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

    • 我从未尝试将带有 main 的脚本文件放在 lib 中,但这违反了包布局约定,我想这就是 DartEditor 不支持它的原因。

    【讨论】:

    • 如何清理警告而没有软链接?在第三点上,它涉及脚本和 lib 之间的真正区别的问题。为什么对带有 main 的库有疑虑,但对带有 main 的脚本(并且根据包布局约定而不是 lib)要求在顶部使用 library 语句来消除警告却没有疑虑?不确定编辑器如何确定它是否可以运行;但一种解决方案是编辑器检查 main 并且如果存在运行 'dart --package-root' 设置为包的包文件夹。然后不需要软链接并且任何东西都是主(甚至是库)也可以作为脚本运行。
    • 我不知道lib,否则您应该能够为您的脚本创建启动配置并添加自定义参数,例如--package-root。有点麻烦,因为您需要为每个文件进行配置。规范化 AFAIK 需要唯一的库名称。
    • 不,太多了。我将坚持脚本(库)的内部命名并暂时进行软链接,因为它可以在没有分析警告的情况下工作。
    • 我有一个项目有类似的要求,也是这样做的。
    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 2015-07-14
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多