美文网首页
2022-12-20 搭建unpub私有pub服务

2022-12-20 搭建unpub私有pub服务

作者: 我是小胡胡123 | 来源:发表于2022-12-19 18:20 被阅读0次

1,将本地flutter版本切换为3.0.0。

unpub服务的启动需要flutter3.0.0
后来发现,这句话不对。
用 dart 启动 或者flutter启动unpub都行。
版本用3.3.7 或者3.0.0都能正常启动。

dart pub global run 'unpub:unpub' --database 'mongodb://localhost:27017/dart_pub'
flutter pub global run 'unpub:unpub' --database 'mongodb://localhost:27017/dart_pub'

2,安装unpub

flutter pub global activate --source path /Users/xx/Desktop/unpub-2.1.0

3,修改unpub源代码

app.dart
找到_getUploaderEmail位置,去掉对应逻辑。
第一处:

@Route.post('/api/packages/versions/newUpload')
Future<shelf.Response> upload(shelf.Request req) async {
  try {
    // var uploader = await _getUploaderEmail(req);
    var uploader = '';

第二处:

@Route.post('/api/packages/<name>/uploaders')
  Future<shelf.Response> addUploader(shelf.Request req, String name) async {
    var body = await req.readAsString();
    var email = Uri.splitQueryString(body)['email']!; // TODO: null
    // var operatorEmail = await _getUploaderEmail(req);
    // var package = await metaStore.queryPackage(name);
    //
    // if (package?.uploaders?.contains(operatorEmail) == false) {
    //   return _badRequest('no permission', status: HttpStatus.forbidden);
    // }
    // if (package?.uploaders?.contains(email) == true) {
    //   return _badRequest('email already exists');
    // }

    await metaStore.addUploader(name, email);
    return _successMessage('uploader added');
  }

第三处:

  @Route.delete('/api/packages/<name>/uploaders/<email>')
  Future<shelf.Response> removeUploader(
      shelf.Request req, String name, String email) async {
    email = Uri.decodeComponent(email);
    // var operatorEmail = await _getUploaderEmail(req);
    // var package = await metaStore.queryPackage(name);
    //
    // // TODO: null
    // if (package?.uploaders?.contains(operatorEmail) == false) {
    //   return _badRequest('no permission', status: HttpStatus.forbidden);
    // }
    // if (package?.uploaders?.contains(email) == false) {
    //   return _badRequest('email not uploader');
    // }

    await metaStore.removeUploader(name, email);
    return _successMessage('uploader removed');
  }

如果不修改:
报错:

Package has 1 warning.. Do you want to publish httptest 0.13.26 to http://127.0.0.1:4000 (y/N)? 
Package upload canceled.
Package has 1 warning.. Do you want to publish httptest 0.13.26 to http://127.0.0.1:4000 (y/N)? y
Uploading... 
missing authorization header

不论当前
flutter3.0开始:

/Users/xx/Library/Application Support/dart/pub-credentials.json

还是以前版本:

/Users/xx/.pub-cache/credentials.json

是否之前成功publish ,都不能发布到unpub 本地。

4,安装mongodb、启动mongodb

brew tap mongodb/brew
# 4.4 版本号
brew install mongodb-community@4.4
# 启动服务
brew services start mongodb-community@4.4
# 查看已启动服务
brew services list

5,启动unpub

flutter pub global run 'unpub:unpub' --database 'mongodb://localhost:27017/dart_pub'

6,打开pub dev前端

http://127.0.0.1:4000/

image.png

7,发布flutter 项目

方法1:
pubspec.yaml添加:
修改版本

name: flutter_widget
description: A new Flutter package project.
version: 2.6.1
homepage:
#主要是这一行
publish_to: http://localhost:4000

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=1.17.0"

flutter pub publish


image.png

方法2:
flutter packages pub publish --server=http://127.0.0.1:4000

Publishing is forever; packages cannot be unpublished.
Policy details are available at https://pub.dev/policy

Do you want to publish provider12 6.0.5+1 (y/N)? y
Uploading...
Successfully uploaded package.

8,使用flutter 私有库

pubspec.yaml
添加

  flutter_widget: #这个name  1
    hosted:
      name: flutter_widget   #这个name  2
      url: http://localhost:4000
    version: ^2.6.1

问题: 1,2,都必须要吗?name 2不写报错啊。

flutter pub get
pubspec.lock

flutter_widget:
   dependency: "direct main"
   description:
     name: flutter_widget
     url: "http://localhost:4000"
   source: hosted
   version: "2.6.1"

可以看到用到私有flutter库了。

前端还可以像pub.dev一样搜索package

image.png

参考:
https://juejin.cn/post/7098240093558669343
https://github.com/bytedance/unpub

相关文章

网友评论

      本文标题:2022-12-20 搭建unpub私有pub服务

      本文链接:https://www.haomeiwen.com/subject/oioyqdtx.html