Flutter自定义库之二:搭建dart私服问题

东方盛慧科技大约 3 分钟flutterflutter

Flutter自定义库之二:搭建dart私服问题

由于官方库flutter_webview不能完全满足需要,需要启动时就要初始化cookie,增加flutter层的js实现和原生层的一些自定义实现。注意参考链接

搭建私服

Flutter 发布package到公有或私有pub https://www.jianshu.com/p/6ef0159af4c7open in new window

使用unpub搭建私有pub服务器

为什么需要私服

有同学可能会问,dart官方不是有提供组件仓库吗?为啥还需要自己的私服呢,感觉吃力不讨好

  1. 其实dart私服存在的目的和gitlab私服等都是一样的,有一定规模的公司都会存在一些内部库/组件,可能会包含一定的业务成分不太方便直接推到公开仓库上去
  2. 另一方面如果公司内部flutter业务方比较多,上下游链路也比较长的话,其实公开仓库是根本没办法满足诉求的,只有经过通过定制化的仓库才可以更灵活的对接公司已有平台和链路,扩展性也强得多(有的库可能不能够及时进行sdk兼容升级,就需要略微的修改自定义)

服务端方案

字节私服地址,不需要clone项目: git clone https://github.com/bytedance/unpub.gitopen in new window

  1. 安装mongodb数据库 https://www.runoob.com/mongodb/mongodb-osx-install.htmlopen in new window
# 进入 /usr/local
cd /usr/local

# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz

# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz

# 重命名为 mongodb 目录

sudo mv mongodb-osx-x86_64-4.0.9/ mongodb

# 安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
export PATH=/usr/local/mongodb/bin:$PATH
数据存放路径:
sudo mkdir -p /usr/local/var/mongodb
日志存放路径:
sudo mkdir -p /usr/local/var/log/mongodb
#接下来要确保当前用户对以上两个目录有读写的权限:
sudo chown username /usr/local/var/mongodb
sudo chown username /usr/local/var/log/mongodb

# 接下来我们使用以下命令在后台启动 mongodb:
mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork

查看 mongod 服务是否启动:
ps aux | grep -v grep | grep mongod
# 使用 brew 安装 mongodb
brew tap mongodb/brew
brew install mongodb-community@4.4

# 运行 MongoDB
我们可以使用 brew 命令或 mongod 命令来启动服务。

#brew 启动:
brew services start mongodb-community@4.4
#brew 停止:
brew services stop mongodb-community@4.4

# mongod 命令后台进程方式:
mongod --config /usr/local/etc/mongod.conf --fork
# 这种方式启动要关闭可以进入 mongo shell 控制台来实现:
> db.adminCommand({ "shutdown" : 1 })
  1. 网上说安装dart 本人flutter
  • brew tap dart-lang/dart
  • brew install dart
  • 本人使用的时候 是安装flutter
  • flutter/bin目录加入到全局环境变量
  1. 安装unpub
  • flutter pub global activate unpub
  • 私服服务器鉴权问题,在缓存中按路径找到unpub源码路径,查找app.dart, _getUploaderEmail 全部返回空字符即可,参考链接open in new window
  • 再次运行 flutter pub global activate unpub
  1. unpub也需要加入环境变量;export PATH="PATH:PATH:HOME/.pub-cache/bin"
  2. 启动 -h 设置host -p设置端口默认4000,云服务注意放开端口
  • nohup unpub --database mongodb://localhost:27017/dart_pub &

结果: xx

客户端上传库

  1. 上传时需要绕过google验证 参考链接open in new window
恢复正常开发:
用txt编辑器打开${flutterSDK Path}/bin/cache/dart-sdk/bin/pub文件

将倒数第三行的: mypub.dart.snapshot替换回原来的 pub.dart.snapshot

  1. 切换到相应的包含yaml文件的目录,执行下面命令参考链接open in new window

客户端引用私有库

yaml文件依赖中加入

  webview_flutter:
    hosted:
      name: webview_flutter
      url: http://10.155.58.36:4000
    version: 3.0.2+8

遇到的问题

  1. google验证绕过
  2. 私服鉴权然后上传包失败 需要查找app.dart,修改使用_getUploaderEmail的地方 然后重新activite unpub才可以 (此处挺坑)
  3. linux安装mogodb数据库发现有旧的
  4. 云服务器需开放4000端口
../../.pub-cache/hosted/pub.dartlang.org/unpub-2.0.0/lib/src/app.dart:113:48: Error: The argument type 'String?' can't be assigned to the parameter type 'Object' because 'String?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
    var server = await shelf_io.serve(handler, host, port);
报错,小问题 空安全 只需修改为host!
上次编辑于:
贡献者: 雷勋