2017-04-12 8 views
2

私の超ロングファイル(main.js)があると正常に動作します。しかし、私は 'y'を扱う関数を組織化のために別々のファイルに分割したいと思っています。 PHPではrequire( 'yfunctions.php')を使い、それを使ってやります。Javascriptのスプリットmain.js(インポート?必要?)

関数呼び出しを書き換える必要はありませんJavaScriptで相当するものはありますか?

main.js:

// do stuff 

function first(x){ 
    // do stuff with x 
} 

function second(y){ 
    // do stuff to y 
    // return y 
} 

function third(y){ 
    // do stuff with y 
} 

は、最終的に次のようになります。

main.js:

require('yfunctions.js'); 
// do stuff 

function first(x){ 
    // do stuff with x 
} 

yfunctions.js:上記

function second(y){ 
    // do stuff to y 
    // return y 
} 

function third(y){ 
    // do stuff with y 
} 

動作しません。 (それはeems)。 yfunctions.jsの各関数に「輸出」宣言を追加する必要がありますか? 「このファイル内のすべての関数を関数としてエクスポートする」と言う方法はありませんか?

(注意、私はNode.jsの/電子で働いている...しかし、私はどのようにjavascriptの作品についての一般的な知識について興味があります。)

答えて

3

利用module.exportsモジュールの輸出メンバーに。あなたの例:

module.exports.second = second; 
module.exports.third = third; 
function second(y){ 
    // do stuff to y 
    // return y 
} 

function third(y){ 
    // do stuff with y 
} 

モジュールのすべてのメンバーを自動的に書き出すオプションはありません。

あなたはES6で作業している場合は、上記のように単純化することができます。この場合、

module.exports = { 
    second, 
    third 
}; 

function second(y){ 
    // do stuff to y 
    // return y 
} 

function third(y){ 
    // do stuff with y 
} 
+0

うわから

module.exports = { foo: function() { // do something }, bar: function() { // do something } }; var tryit = function() { } 

利用機能を確認...ので、私は出て分割していた場合50の関数、私は50のmodule.exportsのリストを持っている必要がありますか? Trees4theForest @ – Trees4theForest

+3

(...と一つだけのモンスター長main.jsファイルを作るために私を奨励)冗長で退屈なようだ - それは正しいです。 'module.exports'以降(ただし、この時点で大部分がサポートされていない)重く[_RevealingモジュールPattern_]として知られているものに基づいていますexport' ES6'(https://addyosmani.com/resources/essentialjsdesignpatterns/book/# revealingmodulepatternjavascript))((http://stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript [ここで良いSO参照です])。ほとんどの場合、できるだけ多くの関数をエクスポートし、実装固有の関数をモジュール自体に隠して、一種の「公開API」を作成しようとします。 –

+3

1つの長いファイルとして残してはならないいくつかの有効な理由があります。あなたは合理的なテキストエディタを使用している場合は、このプロセスを支援することができますリファクタリングツールを有していてもよく、そうでない場合、単純な十分な正規表現は、あなたのためにそれらをつかむことができます。唯一の障害が50の関数名を収集している場合は、ノードソフトウェアをモジュール化することをお勧めします。 –

2

あなたはモジュールのエクスポートを使用する必要があり、使用は、他のアーカイブ内の輸出関数に必要です。そして、あなたが使用することができた後、私の例

functions.js functions.js

var callFunction = require('./functions'); 
console.log(typeof callFunction .foo); // => 'function' 
console.log(typeof callFunction .bar); // => 'function' 
console.log(typeof callFunction .tryit); // => undefined because does not use exports 
関連する問題