2017-07-20 34 views
1

我正在構建一個Atom電子應用程序。現在我有這個在我的網頁視圖之一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(); 

它得到當地腳本,然後在後臺進程中執行它。

我想要做同樣的事情,但我想從外部源檢索腳本像這樣

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

當我這樣做,我得到這樣的錯誤:

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

我如何加載外部腳本?然後用我的work函數使用加載的腳本。我的感覺是,只需要使用本地文件。如果AJAX是答案,我可以看到如何獲取腳本的示例,然後將它傳遞到我的work而不執行它之前?

回答

1

你還沒有提供任何關於你的file.js的細節。但我可以給你一個總的想法。

有你需要的最低打電話給你包一個模塊兩件事情:

  1. file.js(當然有的話)和
  2. 的package.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 
    } 
} 

現在,如果你把你的包任何網站,你可以訪問它:

npm install https://ex.com/path/to/js/file.js 

現在,您的包的副本將被放入node-modules文件夾。

所以,現在你可以訪問它爲:

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

現在,你也可以這樣做:

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

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

謝謝你,這是難以置信的幫助。不過,我希望Electron即使在最終打包的應用程序中也能獲取外部js文件。這樣可以在我的服務器上編輯文件,並且每當用戶重新啓動應用程序時用戶都會看到更改,因此無需更新!也許這是不可能的,但如果你有任何想法如何做到這一點,讓我知道:) –

+0

@TMack很遺憾地說,我不太瞭解這種類型的情況。但我認爲這會有所幫助。讓我明確你的要求。你在某個url上有一個名爲x的包。在更新包中的文件時,如果重新啓動電子應用程序,則應該應用新的更改。如果我是正確的,那麼看看我的答案。這裏最簡單的東西將運行npm install x --save每次運行應用程序之前。爲了使這個過程自動化,把npm install x --save放在你的package.json文件的啓動腳本中 – Vishal

相關問題