IPFS官方:js-ipfs 0.41.0发布,有什么新亮点?

IPFS.CN 发布在 链圈子 海盗号 43361

原文作者:IPFS Community

本文由IPFS中国社区编译整理原文链接:https://blog.ipfs.io/2020-02-13-js-ipfs-0-41/ 随着Filecoin主网上线日期的日益临近,广大投资者对Filecoin挖矿的关注度也越来越高。但是市场上销售矿机/算力的方式多种多样:有卖整机的、有卖算力的;有家庭矿机、有专业矿机、有矿池集群;有人说可以自己在家里挖,有人说必须在专业矿场里才能挖……到底哪种说法正确呢?很多投资者对此有些迷茫。

亮点

一个巨大的飞跃

异步等待和异步可迭代(Async Await and Async Iterables)

我们已经完成了对js-ipfs内部构件的巨大重构,切换到使用Promises和async/ awaitover Callbacks以及使用异步可迭代对象,而不是Node.js Streams和Pull Streams。实际上不只是js-ipfs内部,而是整个堆栈,包括libp2p,IPLD和多格式。 请注意-此版本对核心API进行了重大更改,因此,请参考下面的“ API更改 ”部分以获取所有信息。 这是一段漫长而激动的旅程,但这种重构为消费者、贡献者和核心开发人员带来了许多难以置信的即时和未来收益,使所有工作和努力都值得。总结一下,我们已经完成了如下工作:

  • 默认情况下切换到流式API以减少内存压力
  • 通过删除缓冲,Node.js和Pull Stream API减少了API表面积
  • 减少了代码库中的代码量和我们所依赖的依赖项数量(用于较小的浏览器包和更快的安装时间)
  • 切换到使用异步可迭代对象以流式传输数据以帮助使流式传输更易于访问
  • 切换为使用async/,await这样我们将获得更好的错误堆栈跟踪并提高了可读性和可维护性
在JavaScript中使用async/ await在生态系统中获得了广泛的关注,并且正迅速成为编写惯用JS的实际方法。我们希望js-ipfs 与时俱进,并通过使用现代JS功能,技术和做法继续对贡献者有吸引力。进行这些更改的主要想法是使代码比以往更容易贡献,更易于理解,更易于维护。 这个变化是如此之大,如此之重要,我们写了整篇博客文章来解释这些变化背后的动机。因此这篇文章有一定的深度! 为了您的观看乐趣,我们还对该重构进行了一些统计:
  • 从我们的27个直接依赖项中删除了 package.json
  • 我们的浏览器捆绑包中减少了214个模块
  • 155 KB较轻的浏览器捆绑(unpkg.com/ipfs@0.40.0 VS unpkg.com/ipfs@0.41.0-rc.0) -小于18% !
  • 124 KB较轻的ipfs-http-client浏览器捆绑(unpkg.com/ipfs-http-client@41.0.1 VS unpkg.com/ipfs-http-client@42.0.0) -小于60% !
  • 净删除约2,600行代码
  • 从ipfs-http-client(net)删除了约360行代码
  • CI运行时间缩短约10分钟
而且其中许多统计信息仅适用于js-ipfs和js-ipfs-http-client-冰山一角!对于IPFS,libp2p,IPLD和多格式之间的60-70个依赖关系(https://github.com/ipfs/js-ipfs/issues/1670),也有与此类似的更改。

UnixFS v1.5

事实证明,对于程序包管理器来说,保留文件元数据(尤其是上次修改时间mtime)非常重要。文件mtime允许他们选择性地仅同步已更改的数据。到目前为止,如果要在IPFS上托管大型数据集(如程序包管理器的存储库),将很难进行更新。

“那么永久网络呢?” 这绝对不会妨碍软件包管理器存储库的特定快照永久可用。元数据仅使差异能够导入,而不是整个数据。因此,当我说“难以更新”时,就像我在那里所做的那样,我的意思是缓慢和/或不可能。当拥有TB级(或更多)软件包数据并且有人发布了一个新软件包时,只更改了很小一部分,那么再次导入所有内容是很不方便的。文件确实可以很好地指示发生了什么变化,现在就可以在IPFS中使用它! 例如,在将文件添加到IPFS时,有两个jsipfs add允许mode和mtime保留的新选项:

在新的选择之外并没有大的改变,现在,当你列出目录内容模式Mode和Mtime信息时:

持久保存该文件模式mode也非常有效,因为它打开了以前不可能的NFS类型用例。想象一下,node_modules目录由IPFS支持并安装在文件系统上-该文件mode将允许其中的所有node_modules/.bin文件按照您的期望执行。

最酷的事情是它完全向后兼容。仅当您选择加入元数据时,给定文件/目录的CID才会更改,否则CID保持不变。这真的太棒了 !

同时存在大量更改,为输入和输出的CLI,HTTP和核心API添加了元数据功能。还有两个新的MFS命令touch,chmod它们允许您随时更改元数据! 有关所有新UnixFS v1.5内容的详细信息,请参见下面的“ API更改”部分。

API变更

核心API

此版本中有重大且重大的核心API更改。请参阅迁移指南。
  • IPFS不是可以实例化使用的类IPFS.create。IPFS节点实例不是事件发射器。
  • 如果设置为,init传递给的选项IPFS.create现在将不执行任何初始化步骤false。以前,如果存储库已经存在,它将被初始化。这已不再是这种情况。如果您希望初始化节点,但仅在存储库存在的情况下,则传递init: { allowNew: false }给构造函数。
  • 实例.ready属性已删除。请IPFS.create改用。
  • IPFS.createNode已被删除,请IPFS.create改用。
  • 任何API方法均不再支持回调。请使用诸如callbackifyAPI方法之类的实用程序,该实用程序返回Promises来模拟以前的行为。有关更多信息,请参见迁移指南。
  • 委派的对等和内容路由模块不再作为核心的一部分包含在内(但如果从命令行启动js-ipfs守护程序,则仍然可用)。如果您希望使用委托路由并在Node.js或浏览器中以编程方式创建节点,则必须npm install libp2p-delegated-content-routing和/或在中npm install libp2p-delegated-peer-routing提供它们的配置实例options.libp2p。有关更多说明,请参见模块存储库:
  • https://github.com/libp2p/js-libp2p-delegated-content-routing
  • https://github.com/libp2p/js-libp2p-delegated-peer-routing

 
  • add 现在返回异步可迭代。
  • add现在接受输入的mode和mtime选项,以允许为添加的文件设置模式和mtime元数据。有关更多信息,请参见核心接口文档。
  • add结果现在包含一个cid属性(一个CID实例),而不是一个字符串hash属性。
  • add结果现在包括mode和mtime属性(如果已设置)。
  • addReadableStream,addPullStream已被删除。请参阅迁移指南以获取更多信息。
  • addFromStream已被删除。使用add代替。
  • addFromFs已被删除。请使用导出的globSource实用程序并将结果传递给add。有关更多详细信息和示例,请参见glob源文档。
  • addFromURL已被删除。请使用导出的urlSource实用程序并将结果传递给add。有关更多详细信息和示例,请参见URL源文档。
  • bitswap.stat结果已更改- wantlist值现在是CID实例的数组,peers现在是string[]对等ID的一个。
  • bitswap.wantlist现在返回一个CID实例数组。
  • block.rm 现在返回异步可迭代。
  • block.rm现在产生的对象{ cid: CID, error: Error }。
  • block.stat结果现在包含一个cid属性(其值为CID实例)而不是一个key属性。
  • dht.findProvs,dht.provide,dht.put和dht.query现在所有的异步迭代返回。
  • dht.findPeer,dht.findProvs,dht.provide,dht.put和dht.query现在产量/返回一个对象{ id: string, addrs: Multiaddr[] },而不是一个的PeerInfo实例(或多个)。
  • added files.chmod已添加。有关信息,请参见核心接口文档。
  • files.flush现在返回已刷新路径的根CID(/默认情况下)
  • files.lsPullStream并files.lsReadableStream已被删除。请参阅迁移指南以获取更多信息。
  • files.ls 现在返回异步可迭代。
  • files.ls结果现在包含一个cid属性(其值为CID实例)而不是一个hash属性。
  • files.ls结果现在包括mode和mtime属性(如果已设置)。有关更多信息,请参见核心接口文档。
  • files.ls不再需要long(核心)选项-默认情况下,您将接收所有数据。
  • files.mkdir现在接受mode和mtime选项以允许设置模式和mtime元数据。有关更多信息,请参见核心接口文档。
  • files.readPullStream并files.readReadableStream已被删除。请参阅迁移指南以获取更多信息。
  • files.read 现在返回异步可迭代。
  • files.stat结果现在包含一个cid属性(其值为CID实例)而不是一个hash属性。
  • files.stat结果现在包括mode和mtime属性(如果已设置)。有关更多信息,请参见核心接口文档。
  • added files.touch已添加。有关信息,请参见核心接口文档。
  • files.write现在接受mode和mtime选项以允许设置模式和mtime元数据。有关更多信息,请参见核心接口文档。
  • get现在返回异步可迭代。content从迭代器产生的对象的属性值现在是一个异步可迭代的BufferList对象。
  • id结果已更改,该addresses属性现在为Multiaddr[]
  • name.resolve现在返回异步可迭代。在发现数量之前,它会产生越来越精确的解析值,直到从仲裁群体16中选择出最佳值为止。“最佳”解析值是迭代器生成的最后一项。如果您只对这个最佳价值感兴趣,可以it-last像这样提取它:const last = require('it-last') await last(ipfs.name.resolve('/ipns/QmHash'))
  • object.get现在接受一个timeout选项。TimeoutError如果在超时窗口内未收到任何数据,将导致该方法抛出。可以将其作为a number或a 传递string。如果number传递了a,则将其解释为毫秒;如果传递了字符串,则将其解释为人类可读的duration。
  • ls 现在返回异步可迭代。
  • ls结果现在包含一个cid属性(其值为CID实例)而不是一个hash属性。
  • ls结果现在包括mode和mtime属性(如果已设置)。有关更多信息,请参见核心接口文档。
  • pin.add结果现在包含一个cid属性(一个CID实例),而不是一个字符串hash属性。
  • pin.add现在接受一个timeout选项。TimeoutError如果在超时窗口内未收到任何数据,将导致该方法抛出。可以将其作为a number或a 传递string。如果number传递了a,则将其解释为毫秒;如果传递了字符串,则将其解释为人类可读的duration。
  • pin.ls 现在返回异步可迭代。
  • pin.ls结果现在包含一个cid属性(一个CID实例),而不是一个字符串hash属性。
  • pin.rm结果现在包含一个cid属性(一个CID实例),而不是一个字符串hash属性。
  • ping 现在返回异步可迭代。
  • refs而refs.local现在异步迭代返回。
  • refs现在接受一个timeout选项。TimeoutError如果在超时窗口内未收到任何数据,将导致该方法抛出。可以将其作为a number或a 传递string。如果number传递了a,则将其解释为毫秒;如果传递了字符串,则将其解释为人类可读的duration。
  • repo.gc 现在返回异步可迭代。
  • stats.bw 现在返回异步可迭代。
  • swarm.peers现在返回一个对象数组,其peer属性为string,而不是PeerId实例。
  • swarm.addrs现在返回对象数组,{ id: string, addrs: Multiaddr[] }而不是PeerInfo实例。

HTTP API

  •  /api/v0/add现在支持以下附加多头,允许mode和mtime元数据,对单个文件进行设置:
  • mode 文件模式以应用于创建的UnixFS条目 [string]
  • mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  • mtime-nsecs 修改时间分数(以纳秒为单位) [number]
  • /api/v0/add现在返回文件Mode,Mtime并且MtimeNsecs如果集。
  • /api/v0/file/ls已被删除,请/api/v0/ls改用。
  • added /api/v0/files/chmod已添加,并且支持以下查询字符串args:
  • arg 要应用模式的文件的路径 [string]
  • mode 文件模式适用 [string]
  •  /api/v0/files/ls现在返回文件Mode,Mtime并且MtimeNsecs如果集。
  • /api/v0/files/mkdir现在支持支持以下附加查询字符串args:
  • mode 文件模式适用 [string]
  • mtime 修改时间(以Unix纪元为准)之前或之后的秒数 [number]
  •  /api/v0/files/stat现在返回文件Mode,Mtime并且MtimeNsecs如果集。
  • added /api/v0/files/touch已添加,并且支持以下查询字符串args:
  • arg 要应用模式的文件的路径 [string]
  • mtime 修改时间(以Unix纪元为准)之前或之后的秒数 [number]
  •  /api/v0/files/write现在支持以下其他多部分标题:
  • mode 文件模式以应用于创建的UnixFS条目 [string]
  • mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  •  /api/v0/ls现在返回文件Mode,Mtime并且MtimeNsecs如果集。

命令行界面

  • 🆕 jsipfs add [file...]现在支持以下标志,以尊重和应用mode以及mtime元数据从文件系统中添加或明确设置它们的文件:
  • --preserve-mode 自动将权限应用于从文件系统创建的UnixFS条目 [boolean] [default: false]
  • --preserve-mtime 自动将修改时间应用于从文件系统创建的UnixFS条目 [boolean] [default: false]
  • --mode 文件模式以应用于创建的UnixFS条目 [string]
  • --mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  • --mtime-nsecs 修改时间分数(以纳秒为单位) [number]
  • jsipfs file ls已被删除,请jsipfs ls改用。
  • added jsipfs files chmod [mode] [path]已添加。
  • jsipfs files ls现在将打印文件mode和mtime。
  • jsipfs files mkdir现在支持以下标志:
  • --mode 文件模式以应用于创建的UnixFS条目 [string]
  • --mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  • jsipfs files stat现在将打印文件mode和mtime。
  • jsipfs files touch [path]已添加,并支持以下标志:
  • --mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  • jsipfs files write现在支持以下标志:
  • --mode 文件模式以应用于创建的UnixFS条目 [string]
  • --mtime 在Unix纪元之前或之后的修改时间(以秒为单位),以应用于创建的UnixFS条目 [number]
  •  jsipfs ls现在将打印文件mode和mtime。

其他变化

  • libp2p已升级到0.27,其中还包括对其核心API的重大更改。请参阅发行公告以获取更多信息:
  • https://blog.ipfs.io/2020-02-07-js-libp2p-0-27/
  • 多地址中对等ID 的协议名称已从“ ipfs”更改为“ p2p”。线路上的数据没有任何更改,但是当将多位地址转换为字符串时可以看到此更改。

参与贡献

有几个地方可以开始使用:

检查js-ipfs存储库中help wanted标签的问题,加入IPFS的“全力以赴”,自我介绍,让我们知道您想在哪里做出贡献-https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands

用IPFS破解并向我们展示您的成就!All Hands呼叫也是演示的理想场所,请加入并向我们展示您的构建内容,通过https://discuss.ipfs.io/加入讨论,并帮助用户找到答案。 加入IPFS核心实施每周同步,并参与其中!

本文链接:https://www.8btc.com/media/560552
转载请注明文章出处

文章标签: 星际文件系统
评论
登录 账号发表你的看法,还没有账号?立即免费 注册