在 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.
我从 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.