2015-05-09 27 views
5

我有兩個文件test.jsx.js,在同一個目錄:在Node中,如何在eval中需要文件?

  • 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'd代碼?

+2

強制性的「inb4 eval是邪惡的」:我*做*有很好的理由™ - 我正在編寫一個需要運行時編譯器的lisp宏系統。 – Anko

回答

8

require()本地文件/模塊,該路徑應start with . (same directory) or .. (parent directory)

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

沒有這類原因,節點查找x.js是一個core modulecontained in a node_modules directory


除非eval間接引用:

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

應該評估當前範圍內的字符串,並能夠引用require

+1

\ * facepalm \ *謝謝,我很抱歉。 – Anko

+3

無需抱歉。你的問題現在可以幫助每個人在未來犯同樣的錯誤:) – hugomg