#3495·go-libp2p

允许使用 go-ibp2p,但必须依赖较少的组件

作者: brandond创建于 2026年4月28日更新于 2026年6月14日

目前,简单地导入go-libp2p(或一个使用它的项目,例如[spegel](https://GitHub.com/ spegel-org/ spegel))会拉入一组非常大的间接依赖性. 即使只启用了“libp2p.Chain Options(libp2p. No Transports, libp2p. Transport (tcp. NewTCP Transport))”的单个运输,这些依赖性也全部使用。

例如,即使只使用`tcp',由于“过失运输”变量中提及了所有运输,所有现有运输的依赖性也被调入:

https://GitHub.com/libp2p/go-libp2p/blob/2f158627d8599d90c1c8fd33d8b414308ae3c61f/defaults.go#L45-L51

即使修改了 " 私人运输过失 " 和 " 运输过失 " 以避免进口不必要的运输,也不可能避免拉入 " GitHub.com/quic-go/quic-go " ,因为 " quicreuse " 运输被深入到底部和配置包中:

消除未使用的运输(除quic外)可以将8MB从使用go-libp2p的简单二进制大小中省出. 在不使用时取消抽打,将进一步将大小减少1.6MB.

理想的情况是,运输抽象不会漏入“选项”和“配置”(和同样的测试),而基准包不会默认地拉入所有运输.

内容来源: libp2p/go-libp2p