ノードモジュールは必要なときに実行されますか?
例:いくつかのコードといくつかのエクスポートを含むファイルfoo.jsがあります。
次のコードを実行してファイルをインポートすると
var foo = require(./foo.js);
ファイルfoo.js内のすべてのコードが実行され、その後にのみエクスポートされますか?
ブラウザの<script>
と同じように、モジュールが必要になるとすぐに、コードが解析されて実行されます。
ただし、モジュールのコードの構造によっては、関数呼び出しがない場合があります。
例えば:
// my-module-1.js
// This one only defines a function.
// Nothing happens until you call it.
function doSomething () {
// body
}
module.exports = doSomething;
// my-module-2.js
// This one will actually call the anonymous
// function as soon as you `require` it.
(function () {
// body
})();
いくつかの例..
'use strict';
var a = 2 * 4; //this is executed when require called
console.log('required'); //so is this..
function doSomething() {}; //this is just parsed
module.exports = doSomething; //this is placed on the exports, but still not executed..
ロード時に他のJSコードが実行されるという意味でのみ。
例えばモジュール本体の関数定義が実行されて関数が作成されますが、他のコードが実際に呼び出すまで、その関数は呼び出されたにはなりません。
モジュールの外部に表示されるコンテンツをエクスポートする前に、実行できる同じコードがある場合は実行されますが、クラスのようにエクスポートされるコンテンツは、それをインポートするコードで実行されます。
たとえば、私がこのコードを持っている場合
console.log("foo.js")
module.exports = {
Person: function(){}
}
console.log
require
すると実行されます。