在TypeScript中导入ipfs



使用JavaScript/TypeScript(使用requireimport(导入和模块初始化通常很简单。我在JS IPFS网站上运行初始化ipfs的基本示例时遇到问题。

如果我遵循一般说明,我会得到一个错误:Module parse failed: Cannot use keyword 'await' outside an async function (6:13)

这是关键代码:

const IPFS = require('ipfs-core');
const ipfs = await IPFS.create();

如果我按照建议将ipfs创建放在async函数中,我只是推迟了不可避免的事情。如果我两次调用这样的函数,我会从Unhandled Rejection (LockExistsError): Lock already being held for file: ipfs/repo.lock得到一个错误。我似乎可以创建一个破解来测试是否创建了ipfs,并将其全局初始化为null模块,但这仍然是一个破解。

我应该如何在没有错误的情况下实现或重构const ipfs = await IPFS.create();

可能您的Node版本早于版本14,并且不支持在顶层调用await。您必须处于异步块的上下文中。你可以做一些类似的事情:

const IPFS = require('ipfs')
async function main() {
const ipfs = await IPFS.create()
/* Your code here */
}
// and now you can tell node to run your async main function...
main()

检查https://v8.dev/features/top-level-await在v8引擎中获取有关它的更多信息。还发现了这篇关于Node 14对它的支持的帖子:https://pprathameshmore.medium.com/top-level-await-support-in-node-js-v14-3-0-8af4f4a4d478

在我的情况下,这是由于我连续多次不必要地初始化IFPS。在确保IPFS实例在我的应用程序启动时只初始化过一次之后,我解决了这个错误。

let ready = false
if(!ready) {
const ipfs = await IPFS.create()
ready = true
}

在我的情况下,用户输入进入ipfs,在额外上传时会出现错误"ipfs/repo.lock";继续出现。

在对ipfswiki进行了一些研究之后,似乎与ipfs的实际工作方式存在冲突。在这种情况下,回购名称的随机化是一个非常粗糙的补丁:

const node = await IPFS.create({ repo: "ok" + Math.random() });

相关内容

  • 没有找到相关文章

最新更新