1

欲しいもの

ローカルを必要なモジュールに渡すことは可能ですか?例えば:

// in main.js
var words = { a: 'hello', b:'world'};
require('module.js', words);

// in module.js
console.log(words.a + ' ' + words.b) // --> Hello World

PHPでは、必要な場合やインクルードする場合、別のファイルを含むファイルがその変数を継承するため、これを求めています。これは、場合によっては非常に便利です。これがnode.jsでも実行できれば幸いです。

私が試したがうまくいかなかったこと

 var words = { a: 'hello', b:'world'};
 require('module.js', words);

 var words = { a: 'hello', b:'world'};
 require('module.js');

これらの両方は、が呼び出されReferenceError: words is not definedたときに与えますwordsmodule.js

それで、グローバル変数なしでそれはまったく可能ですか?

4

2 に答える 2

2

あなたがしたいのは、あなたがそれに変数を渡すことができるようにそれを引数でエクスポートすることです。

module.js

module.exports = function(words){
    console.log(words.a + ' ' + words.b);
};

main.js

var words = { a: 'hello', b:'world'};
// Pass the words object to module
require('module')(words);

requireで.jsを切り落とすこともできます:)

于 2012-04-21T13:42:47.970 に答える
0

問題は、何を達成したいのかということです。

静的関数のみをエクスポートする場合は、tehlulzからの回答を使用できます。exportsプロパティ内にオブジェクトを格納し、require-caching node.jsの恩恵を受けたい場合は、グローバルに(ダーティな)アプローチを提供します。これはあなたが試したことだと思います。

WebブラウザコンテキストでJavaScriptを使用すると、windowオブジェクトを使用してグローバル値を格納できます。ノードは、すべてのモジュールに対してグローバルなオブジェクトを1つだけ提供します。processオブジェクト:

main.js

process.mysettings = { a : 5, b : 6};
var mod = require(mymod);

mymod.js

module.exports = { a : process.mysettings.a, b : process.mysettings.b, c : 7};

または、エクスポートのキャッシュに関心がない場合は、次のようにすることができます。

main.js

var obj = require(mymod)(5,6);

mymod.js

module.exports = function(a,b){
 return { a : a, b : b, c : 7, d : function(){return "whatever";}};
};
于 2012-04-21T13:53:14.733 に答える