我从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的参数。应用方法。