【问题标题】:using core.Resource in a Dart transformer leads to Build error在 Dart 转换器中使用 core.Resource 会导致构建错误
【发布时间】:2015-09-18 20:16:59
【问题描述】:

我从 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 的用途)时,在 Transformer 的应用方法中调用它会失败。你会得到一个

构建错误:在 {your project} 上转换 InsertCopyright 引发错误:“package:simple_resource_loading_transformer/copyright.txt”的加载错误:SocketException:OS 错误:连接被拒绝

如何使资源在 Pub Transformer 中工作?还是应该将这个缺失的功能添加到 Dart 中?

更新

所以这里是基于 Transform 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 方法的参数。

【问题讨论】:

  • 资源是实验性的,可能还不能正常工作。特别是它试图创建一个套接字连接恕我直言看起来不太好。
  • “资源是实验性的,可能还不能正常工作。”所以我应该把它作为一个错误放在某个地方吗?
  • 我想是的。 github.com/dart-lang/sdk/issues,请交叉链接这个问题。

标签: dart dart-pub


【解决方案1】:

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

无论如何,您确实应该使用 Barback Transform API 来加载资产。这就是它的用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2017-03-07
    • 2017-04-01
    • 1970-01-01
    • 2019-11-29
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多