Electron:加载外部脚本并将其传递给函数

T M*_*ack 5 javascript external require node.js electron

我正在构建一个 Atom Electron 应用程序。现在我的一个 webview 的 preload.js 中有这个:

var { requireTaskPool } = require('electron-remote');
var work = '';
var _ = require('lodash');

work = requireTaskPool(require.resolve('./local/path/to/js/file.js'));


function scriptRun() {
  console.log('Preload: Script Started');
  // `work` will get executed concurrently in separate background processes
  // and resolve with a promise
  _.times(1, () => {
    work(currentTab).then(result => {
      console.log(`Script stopped. Total time running was ${result} ms`);
    });
  });
}
module.exports = scriptRun;
scriptRun();
Run Code Online (Sandbox Code Playgroud)

它获取本地脚本,然后在后台进程中执行它。

我想做同样的事情,除了我想从外部源检索脚本,如下所示

work = requireTaskPool(require.resolve('https://ex.com/path/to/js/file.js'));
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我会收到如下错误:

Uncaught Error: Cannot find module 'https://ex.com/path/to/js/file.js'
Run Code Online (Sandbox Code Playgroud)

如何加载外部脚本?然后将加载的脚本与我的work函数一起使用。我的感觉是 require 只适用于本地文件。如果 AJAX 是答案,我可以看一下如何获取脚本,然后将其传递到我的脚本work而不事先执行它的示例吗?

Vis*_*hal 1

您尚未提供有关 file.js 的任何详细信息。但我可以给你一个总体思路。

要将包称为模块,至少需要满足两件事:

  1. file.js(当然你有它)和
  2. 包.json

file.js 的结构应该是这样的:

//load your dependencies here

var something = require("something");

//module.exports is necessary to export your code, 
//so that you can fetch this code in another file by using require.

module.exports = function() {
    abc: function(){
         //code for abc function
    },
    xyz: function(){
         //code for xyz function
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您将包放在任何网站上,您可以通过以下方式访问它:

npm install https://ex.com/path/to/js/file.js
Run Code Online (Sandbox Code Playgroud)

现在,您的包的副本将被放入节点模块文件夹中。

所以,现在您可以通过以下方式访问它:

var x = require('name-of-your-package-in-node-modules');
Run Code Online (Sandbox Code Playgroud)

现在,您还可以执行以下操作:

var abc = require('name-of-your-package-in-node-modules').abc;
Run Code Online (Sandbox Code Playgroud)

或者

var xyz = require('name-of-your-package-in-node-modules').xyz;
Run Code Online (Sandbox Code Playgroud)