Flutter插件unpub的使用_Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业
Flutter插件unpub的使用_Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业
Unpub简介
Unpub 是一个自托管的私有 Dart Pub 服务器,适用于企业。它提供了一个简单的 Web 界面,用于搜索和查看包信息。
使用方法
命令行
-
安装 Unpub:
pub global activate unpub
-
启动 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