Электрон: Загрузить файл с `executeJavaScript` - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно добавить пакет NPM в 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?Ака, как вы можете загрузить пакет npm в браузер, если у вас нет контроля над тегами <script /> (по крайней мере, я бы не знал, как их вводить в Electron)?

Обновление:

Из-за того, что 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. как импортируемые ? * ​​1049 *

1 Ответ

0 голосов
/ 28 сентября 2019

Я предлагаю вам использовать этот шаблон или шаблон с хорошей конфигурацией веб-пакета ( рекомендуемый шаблон ).

Выполните следующие действия:

  • Клонируйтерепозиторий
  • Выполнить yarn install
  • Выполнить yarn add web3
  • Добавить import Web3 from 'web3'; в файл app/containers/HomePage.js (реакция рендеринга).
  • Наслаждайтесь
...