Невозможно загрузить сценарий предварительной загрузки - Electron. js Ubuntu 18.04.4 - PullRequest
0 голосов
/ 05 августа 2020

Пытаюсь понять, как эффективно загрузить файл proload. js в электрон:

Версия «электрон»: «^ 9.1.2», версия «электрон-строитель»: «^ 22.8.0 ",

В фоновом режиме. js Я поставил

 webPreferences: {
    nodeIntegration: false,
    contextIsolation: true,
    //preload: path.join(app.getAppPath(), "preload.js"),
    preload: path.join(__dirname, "./preload.js"),
  },

предварительную загрузку. js и фон. js находятся в одной папке: sr c folder .

это моя предварительная загрузка. js:

const {
    contextBridge,
    ipcRenderer
} = require("electron");

const path = require("path");

contextBridge.exposeInMainWorld(
    "api", {
        send: (channel, data) => {
            // whitelist channels
            let validChannels = ["toMain"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, data);
            }
        },
        receive: (channel, func) => {
            let validChannels = ["fromMain"];
            if (validChannels.includes(channel)) {
                // Deliberately strip event as it includes `sender` 
                ipcRenderer.on(channel, (event, ...args) => func(...args));
            }
        }
    }
);

webpack.config. js:

import 'script-loader!./script.js';
import webpack from 'webpack';
const path = require('path');

module.exports = {
  target: ['electron-renderer', 'electron-main', 'electron-preload'],
  pluginOptions: {
    electronBuilder: {
      chainWebpackMainProcess: config => {
        config.resolve.alias.set('jsbi', path.join(__dirname, 'node_modules/jsbi/dist/jsbi-
cjs.js'));
      }
    },
 },
};

module.exports = {
  entry: './src/background.js',
  target: 'node',
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'backend.js'
  }
}

module.exports = config => {
  config.target = "electron-renderer";
  return config;
};

Я получаю следующие сообщения об ошибках:

Загрузка скрипта предварительной загрузки в Electron и Vue

Я добавил эти строки в предварительную загрузку. js, но это не сработало:

window.onload = () => {
  const { dialog } = require("electron").remote;

  window.electron = {};
  window.electron.dialog = dialog; // now set properly
};

Я попытался выполнить решение той же проблемы, но с помощью React вместо Vue. js, но мне это не удалось: https://github.com/electron/electron/issues/9920#issuecomment -336757899

Обновление 1)

Я поместил предварительную загрузку. js в папку dist_electron:

(base) marco@pc01:~/webMatters/electronMatters/ggc-new/dist_electron$   
ls -lah
total 1,5M
drwxr-xr-x 2 marco marco 4,0K ago  6 09:11 .
drwxr-xr-x 9 marco marco 4,0K ago  6 09:11 ..
-rw-r--r-- 1 marco marco 1,5M ago  5 23:25 index.js
-rw-r--r-- 1 marco marco 3,0K ago  5 23:22 package.json
-rw-r--r-- 1 marco marco   54 ago  5 22:06 preload.js

В background.ts я изменил путь до предварительной загрузки. js:

declare const __dirname: string
win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false,
    preload: path.join(__dirname, "../dist_electron/preload.js"),
  }
}

Я добавил следующие строки в webpack.config. js:

const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
  plugins: [
    new CopyPlugin({
      patterns: [
        { from: 'source', to: 'dest' },
        { from: 'other', to: 'public' },
      ],
      options: {
        concurrency: 100,
      },
    }),
  ],
};

Выполнение пряжи электрон: служить Я получаю эту ошибку:

enter image description here

And it seems that what I've done corresponds to what is suggested to do here: Как использовать предварительную нагрузку. js правильно в Electron

Итак ... что я отсутствует? Как решить проблему?

Обновление 2)

Как предлагается здесь: https://github.com/electron/electron/issues/9920#issuecomment -575839738 и здесь https://github.com/reZach/secure-electron-template/blob/master/docs/secureapps.md, чтобы сохранить app safer nodeIntegration нужно оставить false, так как это уже по умолчанию. И «Я хотел бы сделать приложение более безопасным.

Но в любом случае я попытался также поставить nodeIntegration: true:

webPreferences: {nodeIntegration: true, preload: path.join (__ dirname," ../dist_electron/preload.js "),}

И вот результат:

введите описание изображения здесь

Марко

...