提问者:小点点

node.js中require()的路径参数


我正在学习Node.js

例如,我尝试

var server = require("./myserver.js");  

var server = require("./myserver");  

为什么两者都有效?这种东西叫什么?


共1个答案

匿名用户

如果查看require-函数的节点源代码,可以看到requireload-函数调用一个函数FindLongestRegisteredExtension来确定文件扩展名。如果无法确定扩展名,此函数将返回.js作为其默认值:

function findLongestRegisteredExtension(filename) {
  const name = path.basename(filename);
  let currentExtension;
  let index;
  let startIndex = 0;
  while ((index = name.indexOf('.', startIndex)) !== -1) {
    startIndex = index + 1;
    if (index === 0) continue; // Skip dotfiles like .gitignore
    currentExtension = name.slice(index);
    if (Module._extensions[currentExtension]) return currentExtension;
  }
  return '.js';
}

这就是为什么同时使用required(“。/myserver.js”);required(“。/myserver”);将解析同一个模块。