1. ホーム
  2. javascript

[解決済み] Node.jsのmodule.exportsとexportsの比較

2022-03-18 10:27:20

質問

Node.jsのモジュールで以下のような契約書を見つけました。

module.exports = exports = nano = function database_module(cfg) {...}

とは何が違うのだろう。 module.exportsexports と、なぜこの2つが使われているのかを説明します。

どのように解決するのですか?

設定方法 module.exports を使用すると database_module のときに関数のように呼び出されます。 required . を設定するだけです。 exports では、この関数は をエクスポートするためです。 module.exports を参照してください。 次のコードでは、ユーザーが関数を呼び出すことはできません。

モジュール.js

以下は動作しません。

exports = nano = function database_module(cfg) {return;}

以下は、以下の場合に動作します。 module.exports が設定されています。

module.exports = exports = nano = function database_module(cfg) {return;}

コンソール

var func = require('./module.js');
// the following line will **work** with module.exports
func();

基本的に node.js はそのオブジェクトをエクスポートしません。 exports が現在参照しているプロパティをエクスポートします。 exports が元々参照していたものです。 しかし Node.js はオブジェクトをエクスポートします。 module.exports を参照し、関数のように呼び出すことができます。


2番目に重要でない理由

の両方が設定されています。 module.exportsexports を確保するために exports は、先にエクスポートされたオブジェクトを参照しないようにします。 両方を設定することで exports を省略記法として使用することで、後々のバグの可能性を回避することができます。

使用方法 exports.prop = true の代わりに module.exports.prop = true は、文字数を節約し、混乱を避けることができます。