搭建pub私服及上传package Thu, Jul 15, 2021 事情的起因是,在工作项目中,一开始只有我一个人研发,为了方便,我封装了一个网络访问层。但是随着团队规模的拓展,陆续加入了其他人,时间紧项目重,所以后续的伙伴没有时间来问我这个框架怎么使用,所以他们直接上手改了我的封装!但是后期架构要求加入oauth2.0机制,所以需要全局处理token的有效认证,并且自动刷新token。为了满足这一需求,我需要重新编写网络层,同时为了避免伙伴修改我的抽象,我想到了本文的主题——搭建个pub.dev私服吧!
server配置 首先到我的码云 clone个项目下来,然后习惯性flutter pub get
。
接下来修改配置,修改pub_server/example/src/example.dart
文件,找到argsParser()
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ArgParser argsParser () {
var parser = ArgParser ();
parser . addOption ( 'directory' ,
abbr: 'd' , defaultsTo: 'pub_server-repository-data' );
//host地址
parser . addOption ( 'host' , abbr: 'h' , defaultsTo: 'localhost' );
//端口号
parser . addOption ( 'port' , abbr: 'p' , defaultsTo: '8080' );
// 运行模式
parser . addFlag ( 'standalone' , abbr: 's' , defaultsTo: false );
return parser ;
}
由于我的8080端口已经被jenkies占用了,所以只能把pub的端口改为9090。要注意的是,host默认是localhost,只支持本机访问 ,如果我们要挂到服务上,需要把这里改为0.0.0.0
之后,我们才能通过ip或者域名访问服务。
然后启动服务:
1
dart example/example.dart -d /tmp/package-db
如果出现「To make the pub client use this repository configure…」表示服务启动成功!
创建测试package 怎么创建,不说了,这里只贴出yaml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name : lk_dio
description : 用于来康科技公司的网络请求层封装,包括平台、大脑的接口调用规则和token有效期验证及自动刷新机制。
version : 0.0.2
author : William <自己的邮箱@enn.cn>
homepage : 'http://项目主页地址.com'
publish_to : 'http://localhost:9090'
environment :
sdk : ">=2.7.0 <3.0.0"
flutter : ">=1.17.0"
dependencies :
flutter :
sdk : flutter
dev_dependencies :
flutter_test :
sdk : flutter
flutter :
配置好之后,可以在本地直接依赖:
1
2
lk_dio :
path : user/william/lk_dio
当然也可以发布到我们的pub私服上,发布之前可以通过命令检查错误:
1
flutter packages pub publish --dry-run
按照提示解决问题,然后发布:
1
flutter packages pub publish
出现如下信息表明发布成功:
1
2
3
4
5
6
7
8
9
| -- lib
| '-- helloworld.dart
|-- pubspec.yaml
' -- test
' -- helloworld_test.dart
Looks great! Are you ready to upload your package ( y/n) ? y
Uploading...
Successfully uploaded package.
但是如果不FQ,是一定不会成功的,你看到的将是如下信息:
1
Pub needs your authorization to upload packages on your behalf.
失败的原因就是需要google的认证,怎么办,fq? 有没有更好的办法?
绕过google认证 再clone这个项目 之后flutter pub get
,然后执行:
1
dart --snapshot= mypub.dart.snapshot bin/pub.dart
完事后会自动生成一个mypub.dart.snapshot
。
复制之后放入${flutterSDK Path}/bin/cache/dart-sdk/bin/snapshots/ 目录下
用txt编辑器打开${flutterSDK Path}/bin/cache/dart-sdk/bin/pub文件,将倒数第三行的:pub.dart.snapshot
替换为 mypub.dart.snapshot
,然后重新发布package就OK了。
依赖自己的package 1
2
3
4
5
lk_dio:#这里要与之前一致
hosted :
name : lk_dio #这里要与之前一致
url : http://localhost:9090
version : ^1.0.0
添加了依赖之后,我flutter pub get
,本机没问题,项目正常跑,万分激动,但是。。。
当我把server发布到公司服务器后,**publish失败!**经查,是运维没有开放9090端口,找过运维之后问题解决。
然后我再添加依赖,运行pub get,竟然卡住不动了,内心瞬间一万只草泥马德,上传可以下载就不行怪了!后来发现server的配置文件中有个配置:
1
2
// 运行模式
parser . addFlag ( 'standalone' , abbr: 's' , defaultsTo: false );
standalone
好像是独立部署的意思。
把这里的defaultTo
的值改为true
,重新部署、启动,再重新下载依赖pub get,等等足足71秒后竟然成功了!后来运维解释,之所以这么慢是因为从北京访问我们盐城的服务器,而且没有CDN加速。
鸣谢: https://www.jianshu.com/p/59f4778864f0