前言
目前基于Dart语言的包仓库是官方搭建的https://pub.dartlang.org/,默认都是开源的。公司明显是不可能打成开源包上传官方网站的。官方也提供了解决方案。不但官方中心库服务器的源代码在Github上开源,而且还提供了一个简易版的服务器程序供开发者使用,虽然官方建议不要在生产环境下使用,但是公司自己用用还是无妨的。
Dart的依赖
说到仓库就先说一下Dart工程的依赖方法
1.中心库依赖,默认从官网拉取
1 | dependencies: |
2.自定义服务器拉取
1 | dependencies: |
3.git仓库依赖
1 | dependencies: |
4.本地路径依赖
1 | dependencies: |
我们要使用的就是方法二从我们的库服务器上拉取包
搭建服务器
官方提供了一个建议服务器程序,也是由dart编写,github地址为https://github.com/kahnsen/pub_server,我自己fork了一个,做了些许修改。
搭建步骤
- git clone https://github.com/dart-lang/pub_server.git
- cd pub_server 进入文件夹
- pub get 拉取dart需要的依赖库(刚刚说了,这个服务端程序也是由dart编写的)
- 如果没有pub命令,可以去官网下载dart sdk
成功后调用dart example/example.dart -d /tmp/package-db,意思是运行example/example.dart文件。/tmp/package-db是参数,以后上传的包都在这个路径下。
运行成功后,命令行出现
1 | Listening on http://localhost:8080 |
说明已经运行成功了,服务器网址为http://localhost:8080。地址和端口号可以在example/example.dart文件中修改。
现在已经可以上传你的包了
上传dart包
在AndroidStudio新建一个Flutter库(过程忽略)。
一个可以上传的简易pubspec.yaml示例
1 | name: test_flutter_plugin |
在根目录调用(此步骤可忽略,–dry-run是检测是否可以上传的意思,不会真正的上传包)
1 | pub publish --dry-run |
该命令会提示你,还缺少哪些配置和文件,按照提示来就好了。
不带 –dry-run,直接运行pub publish就会真正的上传包了。
中间会有一个授权google的过程,跟上传到官网是一样的。
中间有一个需要注意的地方,publish_to: http://localhost:8080 这个一定要配置,如果不配置的话默认会上传到官方中心库。这个地址就是你私人库的地址。如果不想上传到任何的地方,可以先配置成none
也可以修改环境变量来修改 export PUB_HOSTED_URL=http://localhost:8080
看到SUCCESS,恭喜你,上传成功了。
pub_server的example/example.dart
如果你实在上传不成功,就去看一下这个dart文件。main默认接收了几个参数,其中有一个参数叫standalone,表示是否只使用本地的dart库。我把它改成了true。example.dart中还可以修改地址,端口号,库路径等等。
ps: pub_server收到上传来的dart库后,会把这些dart往中心库再上传一份,所有操作有会和中心库同步,在你拉取库的时候,它也会去官网拉库。相当于是中心库的一个镜像。墙内用户你懂得,会导致你失败。
库目录
文件路径
1 | package-db |
其实就是你的库名,然后按版本号分文件夹,里面是你上传的pubspec.yaml和代码的压缩包
保存好你的库文件,不要被系统自动回收了,不然哭都没地儿哭。
尾声
如果不嫌费事,也可以使用官网的开源代码搭建一个含搜索的自己的中心库。或许将来也会有nexus for dart。
据说官网上传的时候,每个库有10MB的显示。所以尽量使用模块开发吧。
dart官网建议的开发流程
- 在本地开发时,配置pubspec,使用本地路径依赖
- 在主程序依赖这些本地库
- 可以发布时,就把依赖库发布到中心库中。
- 将pubspec修改为依赖中心库
- 如果需要,主程序也可以发布到中心库
其实开发时,git依赖也是一个不错的选择。