在一个电子应用程序中,只是在 main.ts 中导入 libp2p 会导致“自我未定义”

问题描述

在电子应用程序中只是在 main.ts 中导入 libp2p :

const Libp2p = require('libp2p');

导致此错误

A JavaScript error occurred in the main process
Uncaught Exception:
ReferenceError: self is not defined
    at Object../node_modules/multihashing-async/src/sha.browser.js (/home/marco/webMatters/electronMatters/OnlyLibp2p
/.webpack/main/index.js:34203:16)
    at __webpack_require__ (/home/marco/webMatters/electronMatters/OnlyLibp2p/.webpack/main/index.js:21:30)
    at Object../node_modules/libp2p-crypto/src/keys/rsa-class.js (/home/marco/webMatters/electronMatters/OnlyLibp2p
/.webpack/main/index.js:19523:13)

tsconfig.json :

{
  "compilerOptions": {
    "jsx": "react","allowJs": true,"target": "ES6","module": "ESNext","skipLibCheck": true,"esModuleInterop": true,"noImplicitAny": false,"sourceMap": true,"baseUrl": ".","outDir": "dist","moduleResolution": "node","resolveJsonModule": true,"paths": {
      "*": ["node_modules/*"],"@app/*": ["./src/app/*"],"@static/*": ["./src/static/*"],"@src/*": ["./src/*"]
    }
  },"include": ["src/**/*"]
}

开发依赖:

"@electron-forge/cli": "6.0.0-beta.53","@electron-forge/maker-deb": "6.0.0-beta.53","@electron-forge/maker-rpm": "6.0.0-beta.53","@electron-forge/maker-squirrel": "6.0.0-beta.53","@electron-forge/maker-zip": "6.0.0-beta.53","@electron-forge/plugin-webpack": "6.0.0-beta.53","electron": "^11.2.1","typescript": "^4.0.2","webpack": "4"

依赖:

"libp2p": "^0.30.4","libp2p-kad-dht": "^0.20.6",
  • 节点版本:v14.5.0
  • O.S. :Ubuntu 18.04.4 桌面版

我发现在导入另一个 libp2p 库时也会发生这种情况:

//const Libp2p = require('libp2p');
const KadDHT = require('libp2p-kad-dht');

如何解决问题?

解决方法

在渲染器进程中使用 import 而不是 require 解决了这个问题:

import Libp2p from 'libp2p';
import KadDHT from 'libp2p-kad-dht';

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...