我需要BrowserView
使用executeJavaScript
. 该软件包是Web3,这是我迄今为止尝试过的。
import Web3 from 'web3'
const web3 = '' + Web3; // stringify the Web3 class
view.webContents.executeJavaScript(`
const provider = // ... provider got injected successfully because it doesn't have dependencies.
const web3 = new ${web3}(provider);
`)
但这会引发以下错误。
Uncaught ReferenceError: core is not defined
at new Web3 (<anonymous>:45:5)
at <anonymous>:41:16
Web3 正在尝试加载其核心依赖项,但不幸的是没有得到字符串化。
所以我的问题是,我怎样才能将整个包加载到BrowserView
? Aka 如果您无法控制<script />
标签(至少我不知道如何在 Electron 中注入这些标签),您如何在浏览器中加载 npm 包?
更新:
由于 OJ Kwon 在评论中的建议,我尝试通过运行将 Web3 与Browserify捆绑在一起
browserify packages/web3/src/index.js -o web3-bundle.js
. 它似乎奏效了,因为在捆绑文件 ( web3-bundle.js
) 的最后,它说:
// ... 50k+ lines long file
var version = require('../package.json').version;
var core = require('web3-core');
var Eth = require('web3-eth');
var Net = require('web3-net');
var Personal = require('web3-eth-personal');
var Shh = require('web3-shh');
var Bzz = require('web3-bzz');
var utils = require('web3-utils');
var Web3 = function Web3() {
var _this = this;
// sets _requestmanager etc
core.packageInit(this, arguments);
this.version = version;
this.utils = utils;
this.eth = new Eth(this);
this.shh = new Shh(this);
this.bzz = new Bzz(this);
// overwrite package setProvider
var setProvider = this.setProvider;
this.setProvider = function (provider, net) {
setProvider.apply(_this, arguments);
this.eth.setProvider(provider, net);
this.shh.setProvider(provider, net);
this.bzz.setProvider(provider);
return true;
};
};
Web3.version = version;
Web3.utils = utils;
Web3.modules = {
Eth: Eth,
Net: Net,
Personal: Personal,
Shh: Shh,
Bzz: Bzz
};
core.addProviders(Web3);
module.exports = Web3;
现在,我正在尝试像这样导入并包含它:
const Web3 = require('./web3-bundle.js');
这是行不通的。它说undefined
不是构造函数。
const Web3 = require('./web3-bundle.js').Web3;
和
const Web3 = require('./web3-bundle.js').default;
两者都没有工作,要么。应该如何做到这一点?
更新 2:
进一步检查捆绑包,它具有使用exports.
和module.exports =
. 我的编辑器只建议导出exports.
为可导入的方法和对象