【发布时间】: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,请交叉链接这个问题。