【问题标题】:Import ipfs in TypeScript在 TypeScript 中导入 ipfs
【发布时间】:2021-06-19 15:25:56
【问题描述】:

使用 requireimport 的 JavaScript/TypeScript 导入和模块初始化通常很简单。我无法从 JS IPFS website 运行基本示例来初始化 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 的错误。看来我可以创建一个 hack 来测试是否创建了 ipfs 并将其全局初始化为一个模块为 null,但这仍然是一个 hack。

我应该如何实现或重构const ipfs = await IPFS.create();而不出错?

【问题讨论】:

    标签: typescript ipfs js-ipfs


    【解决方案1】:

    可能您的 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

    【讨论】:

    • 这是有用的文档,但是由于我提到的第二个错误,我不能直接将代码放在这样的异步函数中:如果我两次调用这样的函数,我会收到来自 Unhandled Rejection 的错误(LockExistsError):已为文件保留锁定:ipfs/repo.lock。
    【解决方案2】:

    就我而言,这是由于我连续多次不必要地初始化 IFPS。在确保 IPFS 实例仅在我的应用启动时初始化一次后,我能够解决错误。

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

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 2016-09-06
      • 1970-01-01
      • 2017-05-31
      • 2018-11-22
      • 2021-05-18
      • 2017-03-27
      • 2018-10-04
      相关资源
      最近更新 更多