Node是否在所需模块中运行所有代码?

时间:2016-11-07 11:52:55

标签: javascript node.js require

节点模块是否在需要时运行?

例如:你有一个包含一些代码和一些导出的文件foo.js。

通过运行以下代码导入文件时

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

是文件foo.js中的所有代码都运行并且只在那之后导出?

4 个答案:

答案 0 :(得分:8)

就像在浏览器<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
})();

答案 1 :(得分:4)

一些例子..

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

答案 2 :(得分:2)

仅在加载时运行任何其他JS代码的意义上。

e.g。将运行模块主体中的函数定义并创建一个函数,但该函数不会被调用,直到其他代码实际调用它为止。

答案 3 :(得分:0)

在导出在模块外部可见的内容之前,如果有相同的代码可以执行它,则执行它,但是像类一样导出的内容将在导入它的代码中执行。

例如,如果我有这段代码

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

console.log将在您require时执行。