2013-09-24 14 views
6

ノードアプリケーションを複数のファイルに分割して、モジュール化しやすく保守しやすくしたいと考えています。PHPのインクルードに相当するNode.jsがあるので、インクルードされたコードは親ファイルの変数にアクセスできますか?

しかし、PHPのような他の言語のように、現在解析されているファイルにファイルを直接インクルードする方法はないので、私の 'modules'または 'separate files'は自動的にスクリプトに定義された変数にアクセスしませんそれはそれらを必要とします。

どうすればいいですか?

私は別々のファイルにこのような何かをやって考えていた:

module.exports = function(stuff) { 
    //I now have access to 'stuff'. 
} 

しかし、それは少し面倒です。

誰かがすでにこの前に私に取り組んできたと確信しています...あなたは何をお勧めしますか?

+1

読みますdocs:http://nodejs.org/docs/v0.5.5/api/modules.htmlモジュール内で 'exports'オブジェクトを使うと、特定のバリエーションを作ることができます他の変数はプライベートのままです。それはかなり良いです。 –

+2

"私の 'modules'または 'separate files'は、スクリプトで定義された変数に自動的にアクセスすることはありません。 require.jsモジュールのアイデアは、他のスクリプトで使用される機能を提供することです。彼らが他のモジュールのパブリックデータ/メソッドにアクセスしたい場合、それらのモジュール自体が必要です。 –

+0

'ミドルウェア'パターンを考えてみましょう。あなたのモジュールは、実際には最初の 'require'の間に実行された関数のリストを持つオブジェクトです。 – moka

答えて

2

モジュール間で変数を共有する最も簡単な方法は、変数をグローバル名前空間オブジェクトに割り当てることです。ブラウザでどのようにグローバルに宣言されるか宣言された変数は、Nodeではまだモジュール固有であるため、globalオブジェクトがあります。グローバルスコープを使用して

は悪い習慣と考えられているが、他のアプローチよりもはるかに簡単になります

foo.jsは

global.num = 3; 
global.str = 'a string'; 
require('./bar'); 

bar.js

console.log(num); // 3 
console.log(str); // a string 
+0

これは信じられないほど悪い習慣です。すばやく、汚れたテストや、自然なシングルトンの場合は問題ありません(たとえば、ロガーをグローバルにしておきます)。適切な方法は 'module.exports'または' exports.NAME'です。 – Tony

+1

それは質問が何を求めているのではない、私はすでにそれが悪い習慣であるという答えに述べました。問題は、 'module.exports'に関数を割り当てずに、メインスクリプトからモジュールに変数を渡す簡単な方法を探しています。また、モジュールからその親に値をエクスポートするのではなく、親からモジュールに変数を渡しています。 – hexacyanide

+0

私は悪い習慣のあなたの入院を再確認しました、それは私のコメントから確かに不明でした。しかし、それが問題を解決している間、私たちは悪い習慣を促進すべきですか? – Tony

関連する問題