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”的源代码之后,您才能找到(临时)解决方案。这种方法的可靠性非常低,但这完全取决于您希望分配给代码的可靠性级别。