在Node中,如何在eval中需要文件?
我有两个文件test.js
和x.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
。