在Node中,如何在eval中需要文件?

我有两个文件test.jsx.js ,在同一个目录中:

  • test.js

     console.log(eval( "require('x.js')" )); 
  • x.js是空的。

预期require返回undefined ,所以没有logging。

实际node test.js给我Error: Cannot find module 'x.js' (为了简洁,省略了堆栈跟踪)。

情况听起来类似于这个其他问题 ,与我已经使用eval而不是new Function的差异,并require 定义,只是意外地工作。


为什么是这样?

如何正确地require eval代码中的模块?

require()一个本地文件/模块,path应该以. (相同的目录)或.. (父目录) :

 console.log(eval( "require('./x.js')" )); 

如果没有这些,Node会查找x.js作为核心模块或包含在node_modules目录中 。


除非间接引用eval

 var e = eval; // global eval e("require('./x.js')"); // ReferenceError: require is not defined 

它应该评估当前范围内的string并能够引用require