Dart 当脚本使用'pub run'命令运行时,如何查找包目录的路径
我正在编写一个从Dart 当脚本使用'pub run'命令运行时,如何查找包目录的路径,dart,command-line-interface,dart-pub,dart-io,Dart,Command Line Interface,Dart Pub,Dart Io,我正在编写一个从lib目录加载附加数据的包,并希望提供一种简单的方法来加载这些数据,如下所示: constdatapath='mypackage/data/data.json'; 初始化emylibrary(数据路径)。然后(){ //图书馆准备好了 }); 我已经创建了两个独立的库browser.dart和standalone.dart,类似于它在包中的实现方式 从“浏览器”环境中加载此数据非常容易,但在“独立”环境中,由于使用了pub run命令,加载就不那么容易了 当脚本使用simple
lib
目录加载附加数据的包,并希望提供一种简单的方法来加载这些数据,如下所示:
constdatapath='mypackage/data/data.json';
初始化emylibrary(数据路径)。然后(){
//图书馆准备好了
});
我已经创建了两个独立的库browser.dart
和standalone.dart
,类似于它在包中的实现方式
从“浏览器”环境中加载此数据非常容易,但在“独立”环境中,由于使用了pub run
命令,加载就不那么容易了
当脚本使用simple$dart myscript.dart
运行时,我可以使用Platform.script
和Platform.packageRoot
属性找到包路径
但是当脚本使用$pub run tool/mytool
运行时,加载数据的正确方法应该是:
- 通过pub run命令检测脚本是否正在运行
- 查找发布服务器主机
- 从这个服务器加载数据,因为可能有pub转换器,我们不能直接从文件系统加载数据
pub run
运行时,Platform.script
返回/mytool
路径
因此,问题是有没有办法找到脚本是从
pub run
运行的,以及如何找到pub服务器的服务器主机?我不确定这是正确的方法,但当我使用pub run
运行脚本时,包。脚本
实际上返回http://localhost:/myscript.dart
。因此,当方案为http
时,我可以使用http客户端下载,当方案为文件时,从文件系统加载
大概是这样的:
导入'dart:async';
导入“dart:io”;
将“package:path/path.dart”导入为ospath;
未来加载字节(字符串路径){
最终脚本=Platform.script;
最终方案=Platform.script.scheme;
if(scheme.startsWith('http')){
返回新的HttpClient().getUrl(
新Uri(
scheme:script.scheme,
主机:script.host,
端口:script.port,
路径:'packages/'+path')。然后((请求){
返回req.close();
}).然后((回应){
返回响应.fold(
新建BytesBuilder(),
(b,d)=>b..add(d))。然后((建筑商){
返回builder.takeBytes();
});
});
}else if(scheme=='file'){
返回新文件(
join(ospath.dirname(script.path),'packages',path)).readAsBytes();
}
抛出新异常(“…”);
}
一个非常糟糕的生活案例的好解决方案(pub run
)。我不知道这件事。现在我永远不会使用它们(pub-run
)“有没有办法找到脚本是从pub-run运行的?”。可能不会。“如何查找发布服务器的服务器主机?”。若某个行为并没有被记录下来,那个么只有在看到“pub”的源代码之后,您才能找到(临时)解决方案。这种方法的可靠性非常低,但这完全取决于您希望分配给代码的可靠性级别。