@coralogix/protofetch

中文文档
0.1.22发布于 2026/10/30Apache-2.0ES Module零依赖构建来源已验证近 30 天下载 3.7万

Protobuf的源依赖管理工具.

中文使用文档
文档目录15 节
  1. 动机
  2. 为什么是Protofetch?
  3. 路线图
  4. 开始
  5. 使用量
  6. Protofetch模块
  7. 依赖性格式
  8. 允许和拒绝政策
  9. 依赖性循环
  10. 额外的过渡性依赖
  11. Protofetch 依赖toml 实例
  12. Git 协议
  13. SSH 支持
  14. HTTPS 支持
  15. 范围降低多API repo

铺垫

CI Apache 2 License License Crates.io npm version GitHub Stars

Protobuf文件的源依赖管理工具.

动机

如果您广泛使用原生生物作为服务的数据格式,与外界通信或分享你的API, 您需要一个方法为每个服务获取正确的原生文件版本,并且能够依赖特定版本. 服务器和客户端都需要这样做. 没有自动化,它可以很快地变得繁琐,容易出错,而且整体上无法管理.

要使它具有可承受性、可用性和稳定性,就需要工具化,使这项工作自动化并具有可预测性。 这就是Protofetch的目的.

为什么是Protofetch?

Protofetch旨在以宣示方式处理原生生物依赖的复杂性. 宣布依赖关系和管理依赖关系是微不足道的.

它让你有能力拥有:

  • 依赖特定版本/小时;
  • 依靠原生取料的可预见建筑/试验/碳化物;
  • 易读取原生生物依赖性的声明性说明;
  • 自动获取依赖本身及其过渡性依赖.
  • 缓存依赖关系,以便能够在多个项目中共享.

路线图

这个项目仍在发展之中,今后可能会有变化. 我们的目标是在发布第一个稳定版本之前至少实现以下目标.

  • 基于 git 标记或分支获取依赖性
  • 通过修订本地缓存依赖性
  • 获取过渡性依赖性
  • 每个受扶养人申报规则
    • 允许政策
    • 拒绝政策
    • 依赖性修剪( 移除) proto 不需要的文件)
  • 防止循环依赖

开始

无 :

npm install @coralogix/protofetch

货物 :

Protofetch也被释放到 货箱.io,所以如果安装了 Rust 工具链,可以从源代码中构建Protofetch:

cargo install protofetch

预建二进制 :

您可以下载预建的二进制 GitHub 发布 页 次.

使用量

# Fetch proto sources, updating the lock file if needed.
protofetch fetch

# Verify the lock file, and fetch proto sources. Useful for CI.
protofetch fetch --locked

# Validate dependencies against their source repositories and reconcile the lock file.
protofetch lock

# Update all locked dependencies.
protofetch update

# Update only selected dependencies.
protofetch update module-a module-b

# Update one dependency to an exact commit.
protofetch update module-a --precise abc123

fetch 使用不与源寄存器联系的缓存锁定承诺 。 它会回收 需要时缺少依赖关系. lock 财务报告和审定财务报表 update 刷新远程校对并验证 分支和修订限制,即使承诺被缓存. lock 保持现有 有锁的,如果有效; update 为所有或选定的依赖选择新承诺.

Protofetch模块

使用前缀的每个服务需要使用模块描述符 toml 格式. 此描述符默认为 protofetch.toml 并位于服务库的根. 这一点是可以改变的,但令人十分沮丧.

外地类型需求说明
名称字符串强制性定义模块的名称
说明字符串可选模块说明
依赖关系[依赖可选要获取的依赖性

依赖性格式

外地类型需求说明示例
url 密码字符串强制性用于检查 protobuf 文件的仓库地址"github.com/coralogix/cx-api-users/"
订正字符串可选修改后退出, 可以是标记版本或承诺散列v0.2
分支布尔可选要退职的分行, 获取最后的承诺feature/v2
协议字符串可选要使用的协议 : [sh, https]ssh
允许政策[打可选允许政策规则(* 开头或结尾匹配任意目录深度)"/prefix/*", (中文(简体) ), "*/subpath/*", (中文(简体) ), "/path/to/file.proto"
否定政策( d)[打可选拒绝政策规则* 开头或结尾匹配任意目录深度)"/prefix/*", (中文(简体) ), "*/subpath/*", (中文(简体) ), "/path/to/file.proto"
棱镜嘘可选是否仅通过模块依赖来跟踪原型导入而不是复制true 编号 : false
过渡嘘可选标出此依赖性为过渡性true 编号 : false
内容( b)[打可选要导入的子目录["/myservice", "/com/org/client"]

若为 revision 是一个标签和 branch 被设定,标记的承诺必须属于该分支.

若为 revision 承诺必须属于 branch,或者如果 branch 未设置.

允许和拒绝政策

模式 allow_policies 财务报告和审定财务报表 deny_policies 与最近的路径相匹配 content_roots。 。 。 .

allow_policies 仅适用于它们被定义的依赖性,并描述您想要从依赖性中获取的原始文件. 何时 prune = false,只包含匹配的原生文件. 何时 prune = true,匹配的原生文件被用作倒转根: 原生文件跟随原生文件 import 跨模块依赖关系的语句,可能包括从同一模块导入的额外文件,也可能包括从依赖子树导入的文件.

deny_policies 适用于整个依赖子树. 何时 prune = false,不包括匹配的原生文件. 何时 prune = true,不包括匹配原生文件及其导入树.

依赖性循环

Pruning 特性使 protofetch 跟随 proto 文件 import 语句而不是只从模块级依赖关系复制文件。 有了螺旋, protoft 从包含的文件开始 allow_policies,并按模块依赖性逐一跟踪其进口情况, 并获取每个导入的原始文件。 此 traversal 可能包含来自同一模块的额外文件, 即使 他们没有直接匹配 allow_policies,并可能包括从依赖子树导入的原生文件.

额外的过渡性依赖

启动 pruning 时, protofetch 在模块依赖树中查找导入的 proto 文件 . 这取决于每个依赖在a/ protofetch.toml 文档。 如果有受扶养人 不提供一条, 您仍可使用 pruning 特性, 通过声明额外的依赖性 transitive = true。 。 。 . 不直接取出来自过渡依赖的文件 。 它们是作为候选人提供的,只有在 import 由被压迫的依赖而来.

Protofetch 依赖toml 实例

name = "repository name"
description = "this is a repository"

[dep1]
url = "github.com/org/dep1"
revision = "1.3.0"
prune = true
allow_policies = ["/prefix/*", "*/subpath/*", "/path/to/file.proto"]

[dep2]
url = "github.com/org/dep2"
branch = "feature/v2"

[another-name]
url = "github.com/org/dep3"
revision = "a16f097eab6e64f2b711fd4b977e610791376223"
transitive = true

[scoped-down-dep4]
url = "github.com/org/dep4"
revision = "v1.1"
content_roots = ["/scope/path"]
allow_policies = ["prefix/subpath/scoped_path/*"]

Git 协议

Protofetch 支持使用 Git 仓库访问 ssh 或者说 https默认情况下, Protofetch 用途 ssh。您可以用 PROTOFETCH_GIT_PROTOCOL 环境变量.

也可以将协议设置在 protofetch.toml,但这只有在 Git 服务器不支持两个协议时才有必要。 否则,最好不要设置这个字段,让用户选择他们喜欢的任何协议.

SSH 支持

您需要运行一个 SSH 代理, 并加载您的 SSH 密钥 :

ssh-add ~/.ssh/your-private-key

HTTPS 支持

如果您想要使用 https, 您需要配置 git 来使用 证书助手。 。 。 .

支持 https 当 2FA 启用时,您必须生成个人访问符并设定为密码. 以下权限在创建符时已足够 .

GitHub personal access token

范围降低多API repo

对于支持多个API的回波,但只需要特定的目录,即组合 content_roots 财务报告和审定财务报表 allow_policies 可以使用.

例如: dep4 repo包含以下内容:

dep4
 ├── scope
 │   ├── path1
 │   └── path2
 └── scope2
     └── unrelated

我们只需要原始文件 dep4/scope/path1时 path1 是软件包名称.

[scoped-down-dep4]
url = "github.com/org/dep4"
revision = "v1.1"
content_roots = ["/scope"]
allow_policies = ["path1/*"]

版本与发布记录

@coralogix/protofetch 共发布 7 个版本,首次发布于 2025/11/17;过去 12 个月发布了 7 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.22latest2026/10/3012 天前
0.1.212026/07/153 个月前
0.1.202026/07/143 个月前
0.1.192026/06/194 个月前
0.1.182026/06/055 个月前
0.1.172026/05/225 个月前

关于 @coralogix/protofetch 的常见问题

@coralogix/protofetch 是什么?

Protobuf的源依赖管理工具.

如何安装 @coralogix/protofetch?

在项目目录运行 npm install @coralogix/protofetch,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 protofetch,可以用 npx protofetch 直接运行。

@coralogix/protofetch 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/coralogix__protofetch 是否存在。

@coralogix/protofetch 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@coralogix/protofetch 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@coralogix/protofetch 可以商用吗?

@coralogix/protofetch 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@coralogix/protofetch 的下载量有多少?

根据 npm 官方下载统计,@coralogix/protofetch 在 2026/10/11 – 2026/11/09 这 30 天内被下载 37,210 次,日均约 1,240 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@coralogix/protofetch 还在维护吗?

最新版本 0.1.22 发布于 2026/10/30(12 天前);至今共发布 7 个版本,其中过去 12 个月发布了 7 个;首次发布于 2025/11/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。