Flutter 笔记 pubspec

pub.dev/android

版本说明

版本格式:主版本号.次版本号.修订号,版本号递增规则以下:git

  • 主版本号:当你作了不兼容的 API 修改,
  • 次版本号:当你作了向下兼容的功能性新增,
  • 修订号:当你作了向下兼容的问题修正。
any # 全部版本,等同于不写。对pub运行性能有影响,不推荐
1.2.3 # 明确的版本号
'>=1.2.3' # 还有 >1.2.3, <=1.2.3, <1.2.3
^1.2.3 # Caret syntax 等同于 >=1.2.3 <2.0.0
复制代码

版本冲突

若是项目依赖了 A , B 库,他们都依赖了一个 C ,但 C 的版本不一样,可能会产生版本冲突。pub 会尝试找到符合全部依赖约束的版本号。若是找不到能匹配的版本,但 A ,B 库依赖 C 库的 API 是同样的,那么能够添加一个依赖覆盖来强制指定某一版本。 注:pub 是 Dart SDK 提供的一个包管理工具github

dependencies:
  some_package:
  other_package:
dependency_overrides:
  url_launcher: '0.4.3'
复制代码

若是是 Android 平台的库依赖冲突,能够在 app 的 gradle 文件中强制指定版本缓存

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:23.0-android'
    }
}
复制代码

从不一样的依赖源添加依赖

pubbash

dependencies:
  flutter_kit: ^1.0.0 
复制代码

git网络

dependencies:
  flutter_kit:
    git: git://github.com/bineanzhou/flutter_kit.git

复制代码

指定分支app

dependencies:
  flutter_kit:
    url: git://github.com/bineanzhou/flutter_kit.git
    ref: some-branch
复制代码

pub 默认包目录在 git 仓库的根目录,若是要指定在别的位置,能够用 path 参数ide

dependencies:
  flutter_kit:
    git:
      url: git://github.com/bineanzhou/flutter.git
      path: path/to/flutter_kit
复制代码

本地路径

特别适用在一我的同时开发项目和依赖库的状况。由于修改依赖库的代码,在项目中就能够即时生效,有利于调试和提升效率。工具

dependencies:
  transmogrify:
    path: /Users/me/transmogrify # 也能够相对路径,相对路径以 pubspec.yml 文件为基准
复制代码

依赖的分类

根据依赖与项目的关系,能够分为如下2类:性能

  • immediate dependency :项目中直接使用的依赖,即咱们在 pubspec 中列出的依赖,包括 dependcies 和 dev_dependencies
  • transitive dependency :直接依赖所需的依赖, pub 会根据 pubspec 中列出的依赖自动为咱们获取。

直接依赖和传递依赖

举个例子

好比咱们项目依赖 A ,而 A 又依赖 B , B 又依赖 C 。那么 A 是咱们项目的immediate dependency, B 和 C 就是transitive dependency

咱们能够在命令行中输入命令flutter packages pub deps,查看项目的依赖树。 好比咱们在项目中引入了一个支持网络缓存的图片库cached_network_image: ^0.5.0+1

flutter packages pub deps
Dart SDK 2.1.0-dev.9.4.flutter-f9ebf21297
Flutter SDK 1.0.1-pre.2
your_app_name 2.2.0+10 # 项目名称和版本
|-- cached_network_image 0.5.1 # 直接依赖
|   |-- flutter... # 直接依赖(由于在项目pubspec中也添加了)
|   '-- flutter_cache_manager 0.2.0+1 # 传递依赖 | |-- flutter... | |-- http... | |-- path_provider... | |-- shared_preferences... | |-- synchronized 1.5.3 | '-- uuid 1.0.3
|           |-- convert...
|           '-- crypto... ... 复制代码

常规依赖和dev依赖

根据依赖的做用范围,能够分为:

  • dependencies:常规依赖
  • dev dependencies :开发时所需依赖。它和常规依赖的区别是,项目依赖库中的 dev dependencies ,对于你的项目来讲是不可见的。

举个例子

项目的 pubspec.yml 以下。若是 A 有一个 dev_dependencies 依赖 dev_C ,项目最终的依赖是 A , dev_B;不包括 dev_C。

dependencies:
  A:
dev_dependencies:
  dev_B: 
复制代码

适应场景:若是你须要 import 到 lib 或者 bin 目录,那么选择 dependencies ; 若是你只须要 import 到 test , example 等,那么就选择 dev dependencies 。使用 dev dependencies 的好处是能让依赖树更小,从而使 pub 运行更快,能跟容易找到知足全部约束的包版本。

包管理

在获取一个新的依赖时,pub 会下载知足版本条件的最新版本,而后把版本信息添加到一个 lockfile 中。这个 lockfile 文件叫 pubspec.lock ,位于项目 pubspec.yml 的同级目录。它列出了项目的每一个依赖(包括直接依赖和传递依赖)的版本信息。咱们应该把这个 lockfile 添加到版本控制中,这样不论开发环境,生产环境都能确保使用了相同的依赖版本。

举个例子

项目的 pubspec.yml 文件包含以下依赖

...
dependencies:
  flutter:
    sdk: flutter
  cached_network_image: ^0.5.0+1

dev_dependencies:
  flutter_test:
    sdk: flutter
...
复制代码

结合上面提到知识,咱们来看看 pubspec.lock 的内容。 lockfile 把全部依赖树打平,并根据首字母排序

cached_network_image:
    dependency: "direct main" # 直接依赖,常规依赖
    description:
      name: cached_network_image
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.5.1"
flutter: 
    dependency: "direct main" # 直接依赖,常规依赖
    description: flutter
    source: sdk
    version: "0.0.0"
flutter_test:
    dependency: "direct dev" # 直接依赖,开发依赖
    description: flutter
    source: sdk
    version: "0.0.0"
uuid:
    dependency: transitive # 传递依赖
    description:
      name: uuid
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.3"
...

复制代码

若是非首次获取依赖,pub 会从 lockfile 中读取版本。若是想升级到知足 pubspec.yml 中约束的最新版本,能够执行 flutter packages upgrade 命令,升级后会更新 lockfile 中的版本。

相关文章
相关标签/搜索