在 Dart 转换器中使用 core.Resource 会导致构建错误

using core.Resource in a Dart transformer leads to Build error

我从 simple_transformer 示例开始,了解如何编写简单的 Dart Pub Transformer simple_transformer。 此示例通过在代码

中指定来定义要插入到文件中的内容
String copyright = "Copyright (c) 2014, the Example project authors.\n";

相反,我想使用新的 (Dart 1.12) Resource class from the core package 以便从本地文件 (lib/copyright.txt) 加载此版权信息:

static Future<String> loadCopyright() {
  var copyrightRessource = new Resource("package:simple_resource_loading_transformer/copyright.txt");
  return copyrightRessource.readAsString();
}

从主函数调用此方法时有效

main() {
  print('load copyright.txt');
  //this loads the resource as expected
  InsertCopyright.loadCopyright().then(
      (String code)=>print(code)
  );
}

,当尝试转换另一个包时,在 Transformer 的应用方法中调用它失败(这就是 Transformers 的用途)。你会得到一个

构建错误:在{您的项目}上转换 InsertCopyright 抛出错误:"package:simple_resource_loading_transformer/copyright.txt" 的加载错误:SocketException:OS 错误:连接被拒绝

如何让 Resource 在 Pub Transformer 中工作?或者这个缺失的功能仍然应该添加到 Dart 中吗?

更新

所以这是基于建议的转换用法的工作解决方案 API

static Future<String> loadCopyright(Transform transform) {
  var copyrightAssetId = new AssetId('simple_resource_loading_transformer', 'lib/copyright.txt');
  return transform.readInputAsString(copyrightAssetId);
}

Transform 实例来自您的 Transformer.apply 方法的参数。

https://github.com/dart-lang/barback/issues/65#issuecomment-142455056

You should really be using the Barback Transform APIs to load assets anyway. That's what it's for.