Kahn's blogs

Dart依赖和搭建Flutter or Dart简易私人仓库

2018/12/28

前言

目前基于Dart语言的包仓库是官方搭建的https://pub.dartlang.org/,默认都是开源的。公司明显是不可能打成开源包上传官方网站的。官方也提供了解决方案。不但官方中心库服务器的源代码在Github上开源,而且还提供了一个简易版的服务器程序供开发者使用,虽然官方建议不要在生产环境下使用,但是公司自己用用还是无妨的。

Dart的依赖

说到仓库就先说一下Dart工程的依赖方法

1.中心库依赖,默认从官网拉取

1
2
dependencies:
transmogrify: ^1.0.0

2.自定义服务器拉取

1
2
3
4
5
6
dependencies:
transmogrify:
hosted:
name: transmogrify
url: http://some-package-server.com
version: ^1.0.0

3.git仓库依赖

1
2
3
4
5
6
dependencies:
kittens:
git:
url: git://github.com/munificent/kittens.git
ref: some-branch
path: path/to/kittens

4.本地路径依赖

1
2
3
dependencies:
transmogrify:
path: /Users/me/transmogrify

我们要使用的就是方法二从我们的库服务器上拉取包

搭建服务器

官方提供了一个建议服务器程序,也是由dart编写,github地址为https://github.com/kahnsen/pub_server,我自己fork了一个,做了些许修改。

搭建步骤

  1. git clone https://github.com/dart-lang/pub_server.git
  2. cd pub_server 进入文件夹
  3. pub get 拉取dart需要的依赖库(刚刚说了,这个服务端程序也是由dart编写的)
    • 如果没有pub命令,可以去官网下载dart sdk

成功后调用dart example/example.dart -d /tmp/package-db,意思是运行example/example.dart文件。/tmp/package-db是参数,以后上传的包都在这个路径下。

运行成功后,命令行出现

1
2
3
4
5
Listening on http://localhost:8080
To make the pub client use this repository configure your shell via:
$ export PUB_HOSTED_URL=http://localhost:8080

说明已经运行成功了,服务器网址为http://localhost:8080。地址和端口号可以在example/example.dart文件中修改。

现在已经可以上传你的包了

上传dart包

在AndroidStudio新建一个Flutter库(过程忽略)。

一个可以上传的简易pubspec.yaml示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
name: test_flutter_plugin
description: A new Flutter plugin.
version: 0.0.1
author: kahn <xxx@xxx.com>
homepage: https://kahnsen.github.io/kahnblog/
publish_to: http://localhost:8080
environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter:
plugin:
androidPackage: com.kahn.testflutterplugin
pluginClass: TestFlutterPlugin

在根目录调用(此步骤可忽略,–dry-run是检测是否可以上传的意思,不会真正的上传包)

1
pub publish --dry-run

该命令会提示你,还缺少哪些配置和文件,按照提示来就好了。

不带 –dry-run,直接运行pub publish就会真正的上传包了。

中间会有一个授权google的过程,跟上传到官网是一样的。

中间有一个需要注意的地方,publish_to: http://localhost:8080 这个一定要配置,如果不配置的话默认会上传到官方中心库。这个地址就是你私人库的地址。如果不想上传到任何的地方,可以先配置成none

也可以修改环境变量来修改 export PUB_HOSTED_URL=http://localhost:8080

看到SUCCESS,恭喜你,上传成功了。

pub_server的example/example.dart

如果你实在上传不成功,就去看一下这个dart文件。main默认接收了几个参数,其中有一个参数叫standalone,表示是否只使用本地的dart库。我把它改成了true。example.dart中还可以修改地址,端口号,库路径等等。

ps: pub_server收到上传来的dart库后,会把这些dart往中心库再上传一份,所有操作有会和中心库同步,在你拉取库的时候,它也会去官网拉库。相当于是中心库的一个镜像。墙内用户你懂得,会导致你失败。

库目录

文件路径

1
2
3
4
5
6
package-db
--test_flutter_plugin
----0.0.1
------package.tar.gz
------pubspec.yaml
----0.0.2

其实就是你的库名,然后按版本号分文件夹,里面是你上传的pubspec.yaml和代码的压缩包

保存好你的库文件,不要被系统自动回收了,不然哭都没地儿哭。

尾声

如果不嫌费事,也可以使用官网的开源代码搭建一个含搜索的自己的中心库。或许将来也会有nexus for dart。

据说官网上传的时候,每个库有10MB的显示。所以尽量使用模块开发吧。

dart官网建议的开发流程

  1. 在本地开发时,配置pubspec,使用本地路径依赖
  2. 在主程序依赖这些本地库
  3. 可以发布时,就把依赖库发布到中心库中。
  4. 将pubspec修改为依赖中心库
  5. 如果需要,主程序也可以发布到中心库

其实开发时,git依赖也是一个不错的选择。