【发布时间】:2014-08-29 14:36:27
【问题描述】:
Pub 包管理器是否提供了一种全局安装包的方法?
我从事 node.js 开发已经有一段时间了,我想知道是否有 pub 等效于 npm install -g <package_name>
如果有办法全局安装包,有没有办法注册二进制脚本,可以像 shell 命令一样安装调用。
【问题讨论】:
Pub 包管理器是否提供了一种全局安装包的方法?
我从事 node.js 开发已经有一段时间了,我想知道是否有 pub 等效于 npm install -g <package_name>
如果有办法全局安装包,有没有办法注册二进制脚本,可以像 shell 命令一样安装调用。
【问题讨论】:
依赖项
所有 pub 包都是全局安装的(对于每个包版本,Mac/Linux 下 ~/.pub-cache/ 下的唯一子目录 AppData\Roaming\Pub\Cache,对于每个包版本),然后仅链接到您在 pubspec.yaml 中添加依赖项的项目。
实际上~/pub-cache 仅对用户是全局的,而不是对整个系统而言是全局的。我不太了解 npm,但我认为 npm install -g 将它全局安装到系统中。 Dart 中没有类似的东西,但无论如何你都不会在 Dart 中安装包。当您在不同包中使用相同版本的 Pub 包时,它只会在驱动器上保存一次。
全局包可执行文件
可以使用pub global activate ... 全局(每个用户)激活包含可执行脚本的包。如果您将~/.pub-cache/bin/ 目录添加到您的路径中,您可以仅通过它们的名称运行这些可执行的 Dart 脚本(例如 tuneup 包的 tuneup)或 pub global run packagename:scriptName(例如 pub global run tuneup:tuneup)如果脚本和包名称相同,您可以省略:scriptName 部分。
本地包可执行文件
您还可以使用 pub run packageName:scriptName 从当前项目的依赖项中运行脚本(例如 pub run test 用于运行单元测试)
【讨论】:
pub 的便利性和一致性。这是我非常喜欢的npm(甚至是rubygems)的功能之一。如果存在本地版本,Pub 仍然可以使用包的本地版本(应用程序的本地版本)而不是全局版本。