1

インスタンス化された変数をエクスポートするモジュールを作成できますか?

モジュール:

var module1 = require('module1')
var Module2 = require('module2')

module1.dosomething(variables)
exports.module1 = module1

//or

module2 = new Modle2(variables)
module2.dosomething(variables)
exports.module2 = module2

上記のモジュールを他の多くのファイルで要求し、エクスポートをインスタンス化された変数として使用できますか、それとも必要なたびに再インスタンス化され、それらを必要とするファイル間で共有されませんか?

ありがとう!

4

2 に答える 2

3

モジュール、別のモジュール内の変数、およびそのモジュールのエクスポートされたプロパティの両方として、複数のコンテキストでmodule1を使用するため、この例は混乱を招きます。

モジュールをクロージャと考え、エクスポートを戻り値と考えてください。ほとんどの場合、関数/ファクトリ関数をエクスポートし、エクスポートで新しいインスタンスを作成するたびにそれを呼び出すと、オブジェクトが返されるだけなので、他のものはすべて共有されます。

モジュール1

module.exports.var1 = function(opts) {
    // do stuff
    return variables;
};

module.exports.var2 = new Blah(); // single instance

その他のモジュール

var var1 = require('module1').var1({ opt1: 'foo' }); // New instance every time
var var2 = require('module1').var2; // Same var instance even if you include in another module
于 2012-05-18T21:58:51.677 に答える
1

あなたは本当に迷惑になるようにこのようなことをすることさえできます。ほとんどのnpmモジュールでは、この種の愚かさを回避するためにインスタンス化されたバージョンを作成できます。

// file.js
var m1 = require('./m1');
m1.awesome = false;
console.log("I am awesome", m1.awesome);

// file2.js
var m1 = require('./m1');
console.log("I am awesome", m1.awesome);

// both.js
require('./file');
require('./file2');

// m1.js
exports.awesome = true;

今これを実行します:

node file1.js
I am awesome false

node file2.js
I am awesome true

node both.js
I am awesome false
I am awesome false
于 2012-05-18T22:08:17.430 に答える