[英]Electron: Load a file with `executeJavaScript`
我需要使用executeJavaScript
BrowserView
package 是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 正在尝试加载其核心依赖项,但不幸的是没有得到字符串化。
所以我的问题是,如何将整个 package 加载到BrowserView
? 如果您无法控制<script />
标签(至少我不知道如何在 Electron 中注入这些标签),又如何在浏览器中加载 npm package?
更新:
由于 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.
作为可导入的
我建议你使用这个样板或一个样板,包括一个好的 webpack 配置( 建议样板)。
按着这些次序:
yarn install
yarn add web3
import Web3 from 'web3';
进入app/containers/HomePage.js
文件(反应渲染视图)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.