2017-07-20 3 views
1

Ich baue eine Atom Electron App. Im Moment habe ich dies in dem preload.js eines meines WebViews:Electron: Laden eines externen Skripts und Übergabe an eine Funktion

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(); 

Es wird eine lokalen Skript und führt sie dann in einem Hintergrundprozess.

Ich mag genau die gleiche Sache tun, außer ich wie so

work = requireTaskPool(require.resolve('https://ex.com/path/to/js/file.js')); 

das Skript von einer externen Quelle abgerufen werden soll, wenn ich dies tun, ich Fehler wie bekommen:

Uncaught Error: Cannot find module 'https://ex.com/path/to/js/file.js' 

Wie kann ich externe Skripte laden? Und dann benutze die geladenen Skripte mit meiner work Funktion. Mein Gefühl ist, dass nur mit lokalen Dateien arbeiten funktioniert. Wenn AJAX die Antwort ist, kann ich ein Beispiel sehen, wie man ein Skript erhält, und es dann an meine work übergeben, ohne es vorher auszuführen?

Antwort

1

Sie haben keine Angaben zu Ihrer Datei.js gemacht. Aber ich kann dir die allgemeine Idee geben.

Es gibt zwei Dinge, die Sie mindestens benötigen Paket ein Modul anrufen:

  1. file.js (natürlich haben Sie es) und
  2. package.json

Die Struktur Ihrer Datei.js sollte in etwa so aussehen:

//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 
    } 
} 

Jetzt, wenn Sie Ihr Paket auf jede Website, Sie können darauf zugreifen als:

Jetzt wird eine Kopie Ihres Pakets in Node-Module-Ordner abgelegt.

So, jetzt können Sie es als Zugang:

var x = require('name-of-your-package-in-node-modules'); 

Jetzt können Sie auch tun:

var abc = require('name-of-your-package-in-node-modules').abc; 

oder

var xyz = require('name-of-your-package-in-node-modules').xyz; 
+0

Danke das ist unglaublich hilfreich. Allerdings hätte ich gerne Electron die externe js-Datei auch in der endgültigen verpackten App greifen. Dies wäre so, dass ich die Datei auf meinem Server bearbeiten kann und die Benutzer sehen die Änderungen, wenn sie die App neu starten, also keine Notwendigkeit zu aktualisieren! Vielleicht ist das nicht möglich, aber wenn du eine Idee hast, wie das geht, lass es mich wissen :) –

+0

@TMack Entschuldigung, dass ich nicht viel über diese Art von Umständen weiß. Aber ich denke, das wird hilfreich sein. Lassen Sie mich Ihre Anforderungen klären. Sie haben ein Paket namens x auf einer URL. Wenn Sie eine Datei im Paket aktualisieren und die Elektronen-App neu starten, sollten Sie neue Änderungen anwenden. Wenn ich richtig liege, dann schau dir meine Antwort an. Die einfachste Sache hier wird npm install x --save jedes Mal vor dem Ausführen der App ausgeführt werden. Um diesen Prozess zu automatisieren, geben Sie npm install x --save in Ihr Startscript Ihrer package.json-Datei ein – Vishal

Verwandte Themen