作者 | 弗拉德
起源 | 弗拉德(公众号:fulade_me)

什么是Pub工具

Dart 生态系统应用包来治理共享软件,比方:库和工具。咱们应用Pub包管理工具 来获取Dart包。在Pub上,能够找到公开可用的包。或者从本地文件系统或其余的地位,比方Git仓库,加载可用的包。无论包是从什么路径加载的, Pub 都会进行版本依赖治理,从而帮忙咱们取得版本兼容的软件包以及SDK。
pub工具蕴含治理 Package 、部署 Package 和部署命令行利用的命令。
Dart 包目录中至多蕴含一个pubspec文件。

pubspec 文件记录一些对于我的项目的依赖数据。此外还有一些其余数据比方:Dart 库,利用,资源,测试,图片,以及示例。

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

name: my_appdependencies:  js: ^0.6.0  intl: ^0.15.8

pub get

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

 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 文件(位于应用程序的根路目录下),该文件将应用程序所依赖的每个包名相应的映射到零碎缓存中的包。

pub upgrade

第一次获取依赖时,Pub 会下载依赖及其兼容的最新版本。而后通过创立lockfile 锁定依赖,以始终应用这个版本。 Pub会在pubspec旁创立并存储一个名为pubspec.lock文件。它列出了应用的每个依赖包的指定版本(以后包或传递包的版本)。

在开发我的项目中的每个人都可能应用所有雷同版本的包。同样退出到 lockfile 能够保障部署的利用应用的是同一版本的代码。

如果曾经筹备更新依赖到最新版本,应用命令 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 downgradeResolving 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.1Changed 6 dependencies!

pub downgrade 命令会创立一个lockfile文件。如果lockfile文件曾经存在,Pub 则会疏忽该文件并生成一个新的lockfile 文件,而后所有依赖项都会应用最低版本。

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

$ pub downgrade testResolving 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.3Changed 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 <email> 命令发送邀请,被邀请的用户必须承受

其余不罕用的命令可参考:

pub outdated 应用办法参考:https://zhuanlan.zhihu.com/p/...
pub global 应用办法参考:https://www.jianshu.com/p/8a7...