web-dev-qa-db-ja.com

Node必要なモジュール内のすべてのコードを実行しますか?

ノードモジュールは必要なときに実行されますか?

例:いくつかのコードといくつかのエクスポートを含むファイルfoo.jsがあります。

次のコードを実行してファイルをインポートすると

var foo = require(./foo.js);

ファイルfoo.js内のすべてのコードが実行され、その後にのみエクスポートされますか?

13

ブラウザの<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
})();
9
tmslnz

いくつかの例..

'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..
5
Keith

ロード時に他のJSコードが実行されるという意味でのみ。

例えばモジュール本体の関数定義が実行されて関数が作成されますが、他のコードが実際に呼び出すまで、その関数は呼び出されたにはなりません。

2
Quentin

モジュールの外部に表示されるコンテンツをエクスポートする前に、実行できる同じコードがある場合は実行されますが、クラスのようにエクスポートされるコンテンツは、それをインポートするコードで実行されます。

たとえば、私がこのコードを持っている場合

console.log("foo.js")
module.exports = {
     Person: function(){}   
} 

console.logrequireすると実行されます。

0
Yves Kipondo