【Flutter 1-15】Flutter手把手教程Dart语言——包管理工具Pub详解、pub g

做者 | 弗拉德
来源 | 弗拉德(公众号:fulade_me)chrome

什么是Pub工具

Dart 生态系统使用包来管理共享软件,好比:库和工具。咱们使用Pub包管理工具 来获取Dart包。在Pub上,能够找到公开可用的包。或者从本地文件系统或其余的位置,好比Git仓库,加载可用的包。不管包是从什么途径加载的, Pub 都会进行版本依赖管理,从而帮助咱们得到版本兼容的软件包以及SDK。
pub工具包含管理 Package 、部署 Package 和部署命令行应用的命令。
Dart 包目录中至少包含一个pubspec文件。
2020_12_06_pubspec
pubspec 文件记录一些关于项目的依赖数据。此外还有一些其余数据好比:Dart 库,应用,资源,测试,图片,以及示例。缓存

下面是一个 pubspec 的示例,示例中声明依赖了在 Pub 站点上托管的两个包( js 和 intl ):bash

name: my_app
dependencies:
  js: ^0.6.0
  intl: ^0.15.8

pub get

在项目中配置了pubspec文件后,就能够在项目根目录中执行pub get命令:markdown

cd <path-to-my_app>
 pub get

pub get命令肯定当前应用所依赖的包,并将它们保存到中央系统缓存(central system cache)中。若是当前应用依赖了一个公开包,Pub会从Pub站点 该包。对于一个Git依赖,Pub会Clone该Git仓库。
一样包括包的相关依赖也会被下载。例如,若是 js 包依赖 test 包, pub 会同时获取js包和test包。网络

Pub 会建立一个.packages 文件(位于应用程序的根路目录下),该文件将应用程序所依赖的每一个包名相应的映射到系统缓存中的包。
2020_12_06_packagesapp

pub upgrade

第一次获取依赖时,Pub 会下载依赖及其兼容的最新版本。而后经过建立lockfile 锁定依赖,以始终使用这个版本。 Pub会在pubspec旁建立并存储一个名为pubspec.lock文件。它列出了使用的每一个依赖包的指定版本(当前包或传递包的版本)。
2020_12_06_pubspec_lock
在开发项目中的每一个人都可以使用全部相同版本的包。一样加入到 lockfile 能够保证部署的应用使用的是同一版本的代码。ide

若是已经准备更新依赖到最新版本,使用命令 pub upgrade :工具

pub upgrade

上面的命令用于从新生成 lockfile 文件,并使用最新可用版本的依赖包。若是仅升级某个依赖,能够在命令中指定须要升级的包:测试

pub upgrade intl

上面的命令升级intl到最新版本,其它包不变。网站

注意pub upgrade 命令并不是老是能够将全部的package更新到最新版本,缘由是pubspec文件中的一些package之间有版本限制的冲突。

pub cache

用于管理 Pub 的本地 Package 缓存。使用该命令你能够将一个 Package 添加至缓存,或者清除全部缓存的 Package 并从新安装。
你可使用pub cache add命令将新的 Package 添加至缓存。也可使用pub cache repair 命令将Package从缓存中清除并从新安装。

pub cache add <package> [--version <constraint>] [--all]
pub cache repair

选项

add <package>    # 在你的缓存中安装一个库。

--all   # 可选的选项。与 pub add 结合使用用于安装某个库的全部版本。

--version <constraint>  # 可选的选项。与 pub add 结合使用根据限制条件安装最适合的版本。
# 例如:pub cache add barback --version "<=0.8.0 <0.110"  若是省略掉 --version,Pub 会从已知的版本中挑选一个最适合的进行安装。

repair # 若是 Pub 缓存中的 Package 被修改坏了的。例如,有人不当心修改了依赖内的文件,可是不知道该如何修改回来。pub cache repair 命令能够对系统缓存中的全部 Package 执行重安装以修正篡改的问题。

pub deps

该命令能够将 Package 的依赖图示打印输出到控制台。该图示中包括 Package 声明在 pubspec 文件中的直接依赖以及这些直接依赖所依赖的间接依赖

pub deps [--style=<style>] [--dev] [--no-dev] [--executables]

依赖信息默认以树状的形式打印输出。
例如,有个项目的pubspec文件中声明了以下依赖信息:

dependencies:
  barback: ^0.15.2
  markdown: ^0.7.2

当你执行 pub deps 命令时则会看到项目的依赖图示以下:

markdown_converter 0.0.0
|-- barback 0.15.2+6
|   |-- collection 1.1.2
|   |-- path 1.3.6
|   |-- pool 1.1.0
|   |   '-- stack_trace...
|   |-- source_span 1.2.0
|   |   '-- path...
|   '-- stack_trace 1.4.2
|       '-- path...
'-- markdown 0.7.2

选项

--style=<style> 或 -s <style> ## 指定的样式输出格式。用于指定依赖项打印输出的样式。

# 共有 简洁、树状 和 列表 三种,默认是树状样式。

# tree 以树状的形式打印依赖信息。这是默认格式。

# list 以列表的形式打印依赖信息。

# compact 以紧凑列表的形式打印依赖信息。

--dev # 打印全部包依赖信息,包括开发时期依赖。它是默认选项。

--no-dev #打印除了开发期依赖以外的全部包依赖。

--executables #打印全部可用的可执行文件。

pub downgrade

在没有其它额外参数的状况下,pub downgrade命令会获取当前工做目录下 pubspec.yaml 文件中列出的全部依赖项以及它们间接依赖项的最低版本。

pub downgrade [--[no-]offline] [-n|--dry-run] [dependencies...]

例如:

$ pub downgrade
Resolving dependencies... (1.2s)
+ barback 0.13.0
+ collection 0.9.1
+ path 1.2.0
+ source_maps 0.9.0
+ source_span 1.0.0
+ stack_trace 0.9.1
Changed 6 dependencies!

pub downgrade 命令会建立一个lockfile文件。若是lockfile文件已经存在,Pub 则会忽略该文件并生成一个新的lockfile 文件,而后全部依赖项都会使用最低版本。

降级指定依赖项
你能够指定pub downgrade命令只将某个依赖项的版本降至最低且不影响其他依赖项。例如:

$ pub downgrade test
Resolving dependencies...
  barback 0.15.2+2
  bot 0.27.0+2
  browser 0.10.0+2
  chrome 0.6.5
  collection 1.1.0
  path 1.3.0
  pool 1.0.1
  source_span 1.0.2
< stack_trace 0.9.2 (was 1.1.1)
  stagexl 0.10.2
< test 0.10.0 (was 0.11.4)
These packages are no longer being depended on:
- matcher 0.11.3
Changed 3 dependencies!

若是你下降指定依赖项的版本,且该依赖项还有间接依赖项,那么在版本变动后这些间接依赖项可能不适配下降后的新版依赖项。此时,Pub 会尝试在新版本依赖项可接受的范围内查找版本最高的该依赖项所依赖的间接依赖项。所以,一般而言,下降某个依赖项的版本后,其间接依赖项的版本也会随之下降。
获取新的依赖项
若是在执行pub downgrade命令前将某个依赖添加至 pubspec 文件中,则在执行该命令后会将该新的依赖项以及其间接依赖的其它依赖项下载并将其放到 .packages 文件中。这点与 pub get 命令一致。

移除依赖项
若是在 pub downgrade 命令前从 pubspec 文件移除了某个依赖项,则在执行该命令后会将该依赖项从 .packages 文件中移除,且代码使用到该依赖项的相关导入将变得不可用。全部该依赖项依赖的间接依赖项也同时会被移除,只要这些间接依赖项没有没其它的依赖项所依赖。这点也与pub get 命令一致。

离线降级
在没有网络的状况下你也依然能够运行pub downgrade 命令。由于 Pub 会将 Package 下载到一个统一的缓存区并将其与系统上其它的 Package 进行共享,若是你所需的 Package 是一个使用频率很高的 Package,那么颇有可能它已经被其它 Package 在使用时下载到统一缓存区中了,此时你能够直接依赖使用它。

可是,默认状况下,pub downgrade 命令会老是尝试获取线上的依赖版本,所以 Pub 能够肯定依赖项是否有更新的版本。若是你不想 Pub 去线上检查,可使用 --offline 命令参数让该命令在离线模式下执行。在离线模式下,Pub 只会从本地缓存区查找已经下载到的可用 Package。

选项

--[no-]offline # 默认状况下,pub 将会经过网络检查(--no-offline)。要使用缓存的包,请使用 --offline。
--dry-run 或 -n #报告将要改变的依赖项,但不会真的改变它。

pub publish

pub publish [--dry-run] [--force]

该命令用于将你的 Package 发布到pub.dev网站以供其余人下载和依赖。
选项

--dry-run 或 -n #该选项可让你运行上传 Package 的整个流程但不会真正地上传任何文件到 pub.dev 网站。此操做可让你在真正上传到 pub.dev 网站前检查你的上传等相关配置是否有误。

--force 或 -f  #该选项让 Pub 在上传时再也不向你进行确认。正常状况下,它会在你上传时向你显示 Package 的内容以及向你进行确认。

若是 Package 存在错误,Pub 则会退出且不继续进行上传。若是出现的是警告,则 Package 会依旧被上传。若是你想确保你的 Package 在上传前没有警告,请确保不要使用 --force--dry-run 选项。

pub uploader

pub uploader [options] {add/remove} <email>

该命令容许pub.dev网站上某个 Package的上传者为该Package添加或删除其它的上传者。其有两个子命令addremove,能够将邮件地址做为某个上传者的标识以此来添加或删除上传者。例如:

pub uploader add bob@example.com # 咱们已经向 bob@example.com 发送了一份邀请函,在他/她确认后就会成被加入上传者(权限)
pub uploader remove bob@example.com # // 成功将该上传者从 package 中移除

若是 Package 有且只有一个上传者,则该上传者不能再被删除。你能够将本身从上传者列表中删除(只要 Package 中还有其它的上传者便可),可是一旦你删除了本身后则不能再将本身添加回去。

默认状况下,你修改的是当前工做目录中 Package 的上传者。你能够经过 --package 标识来指定修改哪一个 Package 的上传者。例如:

pub uploader --package=transmogrify add bob@example.com 
 # // 咱们已经向 bob@example.com 发送了一份邀请函,在他/她确认后就会成被加入上传者(权限)

经过 pub uploader add &lt;email&gt; 命令发送邀请,被邀请的用户必须接受

其余不经常使用的命令可参考:

pub outdated 使用方法参考:https://zhuanlan.zhihu.com/p/138638020
pub global 使用方法参考:https://www.jianshu.com/p/8a7f2cbac7a1


公众号

相关文章
相关标签/搜索