今天,我们开始从源代码来一窥 IPFS 系统,下文我们以 Node.JS 为例来讲解 IPFS 的源码。当我们写下如下代码
const {createNode} = require(‘ipfs’)
const node = createNode()
时,虽然只有简简单单的两句代码,可是内部却执行了非常非常多的代码,接下来我们就来看系统是如何执行,如何初始化系统的。
当我们执行 createNode 函数时,真正执行的函数处于 ipfs/core/index.js 文件中,代码如下:
module.exports.createNode = (options) => {
return new IPFS(options)
}
上面初始化的 IPFS 对象代表了 IPFS 系统,它位于同一文件中,继承自 EventEmitter 对象。当我们初始化 IPFS 对象时,就开始执行它的构造函数,接下来我们分析下这个构造函数。
调用父类构造函数。
设置系统所使用的环境变量。首先,设置系统默认选项。
const defaults = {
init: true,
start: true,
EXPERIMENTAL: {},
preload: {
enabled: true,
addresses: [
'/dnsaddr/node0.preload.ipfs.io/https',
'/dnsaddr/node1.preload.ipfs.io/https'
]
}
}
其次,验证选项是否有效。
options = config.validate(options || {})
接下来,调用 mergeOptions 函数,使用用户指定选项参数来合并默认选项。
最后,处理选项的 init、start 两个配置,代码如下:
if (options.init === false) {
this._options.init = false
}
if (!(options.start ==