跳至内容

Shards 命令

Crystal 通常与 Shards 捆绑在一起,Shards 是它的依赖管理器。

它管理 Crystal 项目和库的依赖关系,并在不同计算机和系统上实现可重复的安装。

安装

Shards 通常与 Crystal 本身一起分发。或者,您的系统可能提供单独的 shards 包。

要从源代码安装,请下载或克隆 存储库 并运行 make CRFLAGS=--release。编译后的二进制文件位于 bin/shards 中,应将其添加到 PATH 中。

用法

shards 需要项目文件夹(工作目录)中存在 shard.yml 文件。此文件描述了项目并列出了构建项目所需的依赖关系。可以通过运行 shards init 创建默认文件。该文件的内容在 编写一个 Shard 指南 中进行了解释,并且 shard.yml 规范 提供了该文件格式的详细描述。

运行 shards install 将解析并安装指定的依赖关系。安装的版本将写入 shard.lock 文件中,以便在再次运行 shards install 时使用完全相同的依赖版本。

如果您的 Shard 构建了一个应用程序,则应将 shard.ymlshard.lock 都检入版本控制,以提供可重复的依赖关系安装。如果它只是一个供其他 Shard 依赖的库,则 不应 检入 shard.lock,而只检入 shard.yml。建议将其添加到 .gitignore 中(crystal init 在初始化 lib 存储库时会自动执行此操作)。

Shards 命令

shards [<options>...] [<command>]

如果未提供命令,则默认情况下将运行 install

要查看特定命令的可用选项,请在命令后使用 --help

常用选项

  • --version:打印 shards 的版本。
  • -h, --help:打印用法概要。
  • --no-color:禁用彩色输出。
  • --production:在发布模式下运行。不会安装开发依赖关系,只会安装锁定依赖关系。如果 shard.ymlshard.lock 中的依赖关系不同步,命令将失败(用于 installupdatechecklist 命令)
  • -q, --quiet:降低日志详细程度,只打印警告和错误。
  • -v, --verbose:提高日志详细程度,打印所有调试语句。

shards build

shards build [<targets>] [<options>...]

构建 bin 路径中指定的 target。如果未指定 target,则构建所有 target。此命令确保所有依赖关系都已安装,因此无需在之前运行 shards install

命令后面的所有选项都将委托给 crystal build

shards check

shards check

验证所有依赖关系是否已安装且要求是否已满足。

退出状态

  • 0:依赖关系已满足。
  • 1:依赖关系未满足。

shards init

shards init

初始化 Shard 文件夹并创建 shard.yml

shards install

shards install

解析并安装 lib 文件夹中的依赖关系。如果不存在,则根据解析的依赖关系生成 shard.lock 文件,锁定版本号或 Git 提交。

如果存在 shard.lock 文件,则读取并强制执行锁定的版本和提交。如果锁定的版本与要求不匹配,则安装命令可能会失败,但如果添加了新的依赖关系,则安装命令可能会成功,只要不会产生冲突,从而生成新的 shard.lock 文件。

shards list

shards list

列出已安装的依赖关系及其版本。

shards prune

shards prune

从 lib 文件夹中删除未使用的依赖关系。

shards update

shards update

再次解析并更新 lib 文件夹中的所有依赖关系,无论 shard.lock 文件中锁定了哪些版本和提交。最终会生成新的 shard.lock 文件。

shards version

shards version [<path>]

打印 Shard 的版本。

修复依赖版本冲突

shard.override.yml 文件允许覆盖依赖关系的源和限制。可以使用环境变量 SHARDS_OVERRIDE 配置备用位置。

该文件包含一个 YAML 文档,其中包含一个 dependencies 键。它具有与 shard.yml 中相同的语义。依赖关系配置优先于 shard.yml 或任何依赖关系的 shard.yml 中的配置。

用例包括本地工作副本、强制使用特定依赖关系版本(即使不匹配约束)、修复依赖关系、检查与未发布的依赖关系版本的兼容性。

示例文件内容

dependencies:
  # Assuming we have a conflict with the version of the Redis shard
  # This will override any specified version and use the `master` branch instead
  redis:
    github: jgaskins/redis
    branch: master