节点模块是否在需要时运行?
例如:你有一个包含一些代码和一些导出的文件foo.js。
通过运行以下代码导入文件时
var foo = require(./foo.js);
是文件foo.js中的所有代码都运行并且只在那之后导出?
答案 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
时执行。