2017-07-20 3 views
1

私はAtom Electronアプリケーションをビルドしています。今、私は私のwebviewsの1のpreload.jsでこれを持っている:Electron:外部スクリプトを読み込んで関数に渡す

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

あなたのファイルに関する詳細はまだありません。しかし、私はあなたに一般的な考えを与えることができます。

あなたはモジュールパッケージを呼び出すために最低限必要な2つのものがあります。

  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

が、これは非常に便利です、ありがとうございました。しかし、最終的なパッケージ化されたアプリケーションでも、エレクトロンが外部のjsファイルを取得したいと思っています。これはサーバー上のファイルを編集できるようにするためで、ユーザーはアプリを再起動するたびに変更内容を確認できるため、更新する必要はありません。たぶんこれは可能ではないかもしれませんが、あなたがこれを行う方法を知っていれば私に知らせてください:) –

+0

@TMack申し訳ありませんが、私はそのような状況についてあまり知らないと言います。しかし、私はこれが参考になると思います。あなたの要件をクリアしてみましょう。いくつかのURLにxというパッケージがあります。パッケージ内のファイルを更新し、電子アプリを再起動すると、新しい変更が適用されるはずです。私が正しいなら、私の答えを見てください。ここで最も簡単なのは、npm install x --saveを毎回実行してから、アプリケーションを実行します。このプロセスを自動化するには、package.jsonファイルの開始スクリプトにnpm install x --saveを入れます – Vishal

関連する問題