为什么`global.require`在作为nodejs脚本执行时返回undefined?

时间:2016-01-02 13:18:07

标签: javascript node.js

如果我通过将脚本管道到节点来记录global.require,那么它是一个函数,但是如果我从传递给节点的脚本中运行,则它是未定义的......

➜  Desktop  cat req.js 
console.log(global.require)
➜  Desktop  cat req.js | node
{ [Function: require]
  resolve: [Function],
  main: undefined,
  extensions: 
   { '.js': [Function],
     '.json': [Function],
     '.node': [Function: dlopen] },
  registerExtension: [Function],
  cache: {} }
➜  Desktop  node req.js 
undefined
➜  Desktop

我是否找到了薛定谔的变量 - 还是有更普通的解释?

1 个答案:

答案 0 :(得分:3)

如果我正确理解节点代码:

当Node启动时,Node可以采用一些不同的执行路径。在您的情况下,有两个:从stdin读取脚本,或从文件中读取脚本。

  • stdin阅读将会执行this code,正如您所见,here将定义global.require;
  • 从文件中读取将遵循不定义global.require;
  • 的不同代码路径(起始here

也许在后一种情况下,require由模块上下文提供,因此没有必要添加到global,但这只是我的猜测。