我在同一目录中有两个文件test.js
和x.js
:
test.js
:
console.log(eval( "require('x.js')" ));
x.js
为空。
预计:require
会返回undefined
,因此不记录任何内容。
实际:node test.js
为我提供了Error: Cannot find module 'x.js'
(为简洁起见,省略了堆栈跟踪)。
情况听起来与this other question类似,我使用eval
而不是new Function
,而require
的差异已经定义,只是意外地工作。
为什么会这样?
如何在require
代码中正确eval
模块?
答案 0 :(得分:11)
要require()
本地文件/模块,路径应为start with .
(same directory) or ..
(parent directory):
console.log(eval( "require('./x.js')" ));
如果没有其中任何一个,Node会将x.js
视为core module或contained in a node_modules
directory。
除非间接引用eval
:
var e = eval; // global eval
e("require('./x.js')"); // ReferenceError: require is not defined
它应评估当前范围内的字符串,并能够引用require
。