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/

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

方法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

参考:
https://juejin.cn/post/7098240093558669343
https://github.com/bytedance/unpub
网友评论