【问题标题】:dart pub build: exclude a file or directorydart pub build:排除文件或目录
【发布时间】:2015-09-14 14:43:12
【问题描述】:

在使用 dart 的 pub build 构建 Web 应用程序时,我试图排除文件或目录列表。 正如documentation 所建议的那样使用它:

transformers:
- simple_transformer:
    $exclude: "**/CVS"

不起作用:

pubspec.yaml 第 10 行第 3 列出错:“simple_transformer”不是依赖项。

- simple_transformer:

有没有办法(使用 SDK 1.10.0)?

【问题讨论】:

    标签: dart dart-pub


    【解决方案1】:

    遗憾的是,正如 Günter 已经提到的那样,目前不支持将文件标记为 pub build 忽略。 .gitignore 功能已被删除,因为它没有记录在案,造成的麻烦多于解决的问题。

    但您可以从构建输出中排除文件。这意味着文件仍在处理中(并且仍然需要时间来处理 =/ )但不存在于输出目录中。这对于一次性生成应用程序的可部署副本很有用。

    在我们的应用程序中,我们使用简单的 ConsumeTransformer 将资产标记为已使用,这样它们就不会被写入输出文件夹:

    library consume_transformer;
    
    import 'package:barback/barback.dart';
    
    class ConsumeTransformer extends Transformer implements LazyTransformer {
      final List<RegExp> patterns = <RegExp>[];
    
      ConsumeTransformer.asPlugin(BarbackSettings settings) {
        if (settings.configuration['patterns'] != null) {
          for (var pattern in settings.configuration['patterns']) {
            patterns.add(new RegExp(pattern));
          }
        }
      }
    
      bool isPrimary(AssetId inputId) =>
          patterns.any((p) => p.hasMatch(inputId.path));
    
      void declareOutputs(DeclaringTransform transform) {}
    
      void apply(Transform transform) => transform.consumePrimary();
    }
    

    消费者需要一个正则表达式模式列表作为参数来消费匹配的文件。您需要将转换器作为最后一个转换器添加到您的 pubspec.yaml 文件中:

    transformers:
    - ... # Your other transformers
    - packagename/consume_transformer:
        patterns: ["\\.psd$"]
    

    示例配置会忽略所有扩展名为 psd 的文件,但您可以根据需要添加模式。

    我创建了一个包含转换器的 pub 包,看看here

    【讨论】:

    【解决方案2】:

    simple_transformer 是您要通知排除文件的转换器的名称。如果您想将此应用到 dart2js,您需要使用名称 $dart2js 而不是 simple_transformer
    有关配置$dart2js 的更多详细信息,请参阅https://www.dartlang.org/tools/pub/dart2js-transformer.html

    【讨论】:

    • 我尝试了 $dart2js,但这并不排除带有 pub build 的文件/目录。我认为这是因为 dart2js 只生成 Javascript,而不复制任何资源文件。我认为另一个转换器可以做到这一点,但如果不是 simple_transformer,它的名称是什么?
    • 我刚刚尝试使用.gitignore,但它似乎被忽略了pub build
    • 我不确定这是否已更改,但根据相关问题.gitignore 应该可以工作github.com/dart-lang/pub/issues/1093
    • 提到了github.com/dart-lang/pub/issues/508 的更改,但我不确定这是否意味着它现在使用或不使用.gitignore :-/
    • 感谢您的链接。也许使用 .gitignore 适用于其他版本的 SDK(我使用的是 1.10,因为它是 Dart 编辑器支持的最后一个版本)。
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 2014-08-04
    • 2012-04-08
    • 2014-03-05
    • 2015-01-18
    • 2015-05-24
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多