node在解析每个模块(js 文件)时,会对每个模块进行包装,就是在代码外面加一个闭包,并且向里传递五个参数,这样就保证了每个模块之间的独立,就像下面这样:
(function(exports, require, module, __filename, __dirname) {
// module: 表示当前模块
// __filename: 当前模块的带有完整绝对路径的文件名
// __dirname: 当前模块的完整绝对路径
module.exports = exports = this = {};
// 我们的代码就在这里...
return module.exports;
})()
想想我们平时是不是常在 webpack 里面看到 __dirname 这种东西,我们既没有引入也没有声明它,为什么能够直接使用呢,就是因为这个原因。