代码之家  ›  专栏  ›  技术社区  ›  StephanS

使用核心。Dart转换器中的资源导致生成错误

  •  1
  • StephanS  · 技术社区  · 9 年前

    我从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/coright.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)
      );
    }
    

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

    生成错误:{您的项目}上的Transform InsertCopyright引发错误:“package:simple_resource_loading_transformer/copyright.txt”的加载错误:SocketException:OS错误:连接被拒绝

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

    使现代化

    因此,以下是基于TransformAPI的建议使用的工作解决方案

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

    Transform实例来自Transformer的参数。应用方法。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Günter Zöchbauer    9 年前

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

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