Flutter插件unpub的使用_Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业

Flutter插件unpub的使用_Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业

Unpub简介

Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业。它提供了一个简单的 Web 界面,用于搜索和查看包信息。

Screenshot

使用方法

命令行
  1. 安装 Unpub:

    pub global activate unpub
    
  2. 启动 Unpub 服务器(请将数据库 URI 替换为生产环境中的数据库 URI):

    unpub --database mongodb://localhost:27017/dart_pub
    

默认情况下,Unpub 使用 MongoDB 存储元数据,并使用文件系统存储包(tarball)。

Dart API

以下是一个完整的示例代码,展示了如何使用 Dart API 启动 Unpub 服务器:

import 'package:mongo_dart/mongo_dart.dart';
import 'package:unpub/unpub.dart' as unpub;

void main(List<String> args) async {
  // 连接到 MongoDB 数据库
  final db = Db('mongodb://localhost:27017/dart_pub');
  await db.open(); // 确保 MongoDB 连接已打开

  // 创建 Unpub 应用实例
  final app = unpub.App(
    metaStore: unpub.MongoStore(db), // 使用 MongoDB 存储元数据
    packageStore: unpub.FileStore('./unpub-packages'), // 使用文件系统存储包
  );

  // 启动服务器
  final server = await app.serve('0.0.0.0', 4000);
  print('Serving at http://${server.address.host}:${server.port}');
}

配置选项

选项 描述 默认值
metaStore (必需) 元数据存储 -
packageStore (必需) 包存储(tarball) -
upstream 上游 URL https://pub.dev
googleapisProxy 调用 Google APIs 的 HTTP(s) 代理 -
uploadValidator 包验证器 -

反向代理配置

如果你在反向代理(如 Nginx)后面使用 Unpub,请确保你有必要的头部信息:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# 解决异步错误 HttpException: Trying to set 'Transfer-Encoding: Chunked' on HTTP 1.0 headers
proxy_http_version 1.1;

包验证器

命名冲突是私有仓库中常见的问题。通过 uploadValidator,你可以检查上传的包是否有效。例如,只允许带有特定前缀的包上传:

var app = unpub.App(
  // ...
  uploadValidator: (Map<String, dynamic> pubspec, String uploaderEmail) {
    // 只允许带有指定前缀的包上传
    var prefix = 'my_awesome_prefix_';
    var name = pubspec['name'] as String;
    if (!name.startsWith(prefix)) {
      throw 'Package name should starts with $prefix';
    }

    // 也可以检查上传者的邮箱是否有效
    if (!uploaderEmail.endsWith('@your-company.com')) {
      throw 'Uploader email invalid';
    }
  }
);

自定义元数据和包存储

Unpub 设计为可扩展的,你可以轻松地自定义自己的元数据存储和包存储。例如:

import 'package:unpub/unpub.dart' as unpub;

class MyAwesomeMetaStore extends unpub.MetaStore {
  // 实现 MetaStore 抽象类的方法
  // ...
}

class MyAwesomePackageStore extends unpub.PackageStore {
  // 实现 PackageStore 抽象类的方法
  // ...
}

// 使用自定义的存储
var app = unpub.App(
  metaStore: MyAwesomeMetaStore(),
  packageStore: MyAwesomePackageStore(),
);

更多关于Flutter插件unpub的使用_Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部