LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > IPFS官方宣布:js-ipfs0.41.0发布

IPFS官方宣布:js-ipfs0.41.0发布

2020-03-05 FilCloud 来源:区块链网络

本文由 FilCloud 编译整理

订阅英文原版 :https://blog.ipfs.io/2020-02-13-js-ipfs-0-41/

亮点

一个巨大的飞跃

异步等待和异步可迭代

我们已经完成了对 js-ipfs 内部构件 HU 的巨大重构,切换到使用 Promises 和async/?await?over 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/[email protected]?VS?unpkg.com/[email protected]) -这是小 18%?!

124 KB较轻的ipfs-http-client浏览器捆绑(unpkg.com/[email protected]?VS?unpkg.com/[email protected]) -这是小 60%!

净删除约 2,600 行代码

从ipfs-http-client(net)删除了约 360 行代码

CI运行时间缩短约 10 分钟

…而且其中许多统计信息仅适用于 js-ipfs 和 js-ipfs-http-client-冰山一角!对于 IPFS,libp2p,IPLD 和多格式之间的 60-70 之间的依赖关系,我们看到了与此类似的更改。

UnixFS v1.5

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

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

例如,在将文件添加到IPFS时,有两个jsipfs add允许mode和mtime保留的新选项:

$ jsipfs add -r --preserve-mtime --preserve-mode ~/Desktop/gifadded QmT6WX9McZyx5ZoisRgpsjYKDBWnYpMnBLpfAgjW5kavBA gif/yesthisisdog.jpgadded QmXMrFfZ9zHLZKN7xP2dX76YFFhvBJsQkd4fLnTDkyR31Q gif

除了新选项buuut之外,没有什么大的变化,现在当您列出目录内容 Mode 和 Mtime 信息时:

$ jsipfs ls QmXMrFfZ9zHLZKN7xP2dX76YFFhvBJsQkd4fLnTDkyR31Q -vMode ? ? ? Mtime ? ? ? ? ? ? ? ? ? ? ? ? ? Hash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Size ?Name-rw-r--r-- Apr 16, 2018, 12:20:33 PM GMT+1 QmT6WX9McZyx5ZoisRgpsjYKDBWnYpMnBLpfAgjW5kavBA 87779 yesthisisdog.jpg

持久保存该文件 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”。线路上的数据没有任何更改,但是当将多位地址转换为字符串时可以看到此更改。

参与贡献

您想为IPFS项目做贡献,又不知道如何做吗?好吧,有几个地方可以开始使用:

检查 js-ipfs 存储库中 help wanted 标签的问题

加入IPFS All Hands,自我介绍,并让我们知道您想在哪里做出贡献-https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands

用 IPFS 破解并向我们展示您的成就!All Hands 呼叫也是演示的理想场所,请加入并向我们展示您的构建内容

通过 https://discuss.ipfs.io/加入讨论,并帮助用户找到答案。

加入? IPFS 核心实施每周同步?,并参与其中!

你有问题吗?

最好的地方要问你关于 IPFS 的问题,它是如何工作的,哪些是你可以用它做的是在 discuss.ipfs.io。我们也可以在#ipfsFreenode 上的频道上找到。

—-

编译者/作者:FilCloud

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...