如果我有一個源代碼字符串,也真正需要()的代碼,而不是文件
var code = "console.log('I\'ve been loaded.');";
,並希望在節點上運行它,通常它的建議使用
vm.runInThisContext(code, "NOT_A_FILE.mycode");
這是一切都很好,直到代碼變得更加複雜:
var code2 = "require('http');\n" +
"console.log(http);" // TODO make more useless
在這種情況下,我們不能在vm
中運行代碼2,因爲它不會讓模塊具有require()
函數,因爲vm只是V8 VM,而不是節點1。
這是我迄今爲止遇到的唯一問題 - 但我不知道可能出現其他問題。
所以,從根本上,我的問題是:什麼額外的功能並不require()
製造節點模塊做的,我怎麼能保證我的「串」的模塊具有此功能?如果我需要這個功能,我最好只是做臨時文件,我實際上是require()
?
你試圖解決什麼問題?這似乎是一種創造性的,但很差的做事方式。如果您實質上評估的是用戶生成的任何內容,則會引發問題。 – 2011-12-25 20:53:57
@RyanOlds我有一個腳本,它將很多文件合併在一起,然後嘗試運行組合文件。組合文件的來源是沒有用的(我有標記顯示原始的行號等字符串中的調試)。 – 2011-12-25 21:53:15
請讓我知道如果我的答案中的代碼不適合你。 – 2013-03-18 09:39:52