Node.js は、サーバー上で JavaScript を実行できる Chrome V8 エンジンに基づくプログラミング言語です。モジュールとパッケージを使用して、プログラムを簡単に編成し、依存関係を管理できます。このうち、module.exports
と exports
はモジュール化においてよく使われる概念であり、この記事では Node.js での使い方を紹介します。
Node.js では、各ファイルは独立したモジュールです。ファイル内の変数や関数を他のモジュールで使用したい場合は、エクスポートします。変数 module.exports
と exports
の両方をエクスポートできます。
Node.js では、各モジュールに module
オブジェクトがあり、このオブジェクトには exports
属性などのモジュール関連情報が含まれます。 exports
エクスポートする変数または関数をこの属性にマウントし、require()
関数を通じて外部からモジュールを参照し、エクスポートされた変数と関数を呼び出します。
デフォルトでは、exports
は module.exports
の参照を指すため、exports
および module.exports
モジュールをエクスポートできますが、この 2 つの間のポインティング関係は常に同じであるとは限らないため、場合によっては exports
の代わりに module.exports
を使用する必要があることに注意してください。
exports
を使用してオブジェクトをエクスポートする場合、実際には exports
に属性を追加し、値を割り当てます。 。例:
// add.js exports.add = function (a, b) { return a + b; }
上記のコードでは、exports
を使用して add()
メソッドをエクスポートします。次のコードを実行するのと同じです:
exports.add = function (a, b) { return a + b; } module.exports = exports; // exports被默认指向module.exports
次に例を見てみましょう:
// math.js exports.add = function (a, b) { return a + b; }; exports.sub = function (a, b) { return a - b; }; // app.js const math = require('./math'); console.log(math.add(1, 1)); // 2 console.log(math.sub(1, 1)); // 0
require()
を通じて math
モジュールを参照します。関数を実行し、そのエクスポートされたメソッドを呼び出すと、結果が正しく出力されます。なぜそれが正しいのでしょうか?
#exports がデフォルトで
module.exports を指すことはわかっていますが、
exports を新しいオブジェクト
に直接指すと、 module .exports の指向関係が変更されました。 Node.js がモジュールをロードすると、実際には
exports オブジェクトではなく
module.exports オブジェクトが返されるため、
exports を新しいオブジェクトにポイントした後、次に、新しいオブジェクトを
module.exports の値として使用します。これが実際のエクスポート操作です。
exports = { add: function (a, b) { return a + b; }, sub: function (a, b) { return a - b; }, } module.exports = exports;
exports の属性を再割り当てするだけでは、その属性と
module.exports の間のポインティング関係は変わりません。
// multiply.js exports = { mul: function (a, b) { return a * b; } } // app.js const multiply = require('./multiply'); console.log(multiply.mul(2, 5)); // TypeError: multiply.mul is not a function
exports は新しいオブジェクトを指しますが、そのプロパティは割り当てられていないため、エクスポートされた値は
unknown になります。 なので、呼び出し時に TypeError が発生します。
exports を直接使用してモジュールをエクスポートできます。ただし、関数やオブジェクトを
exports にマウントするのではなく、モジュールから直接エクスポートする必要がある場合があります。この場合は、
module.exports を使用する必要があります。
// foo.js module.exports = function () { console.log('Hello World!') } // app.js const foo = require('./foo'); foo(); // Hello World!
module.exports に直接割り当てると、実際にはその関数がモジュール全体のエクスポート オブジェクトとして使用されます。
以上がnodejsエクスポートの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。