每當我運行vm.runInThisContext(code, filename)
時,我運行的代碼報告爲__filename
和__dirname
爲undefined
。NodeJS vm.runInThisContext()和缺少__filename
這也導致了任何fs.readFile
和這樣的調用都不能用於相對路徑的情況。實際上,文件系統功能根本不起作用,即使我給它們提供硬編碼的絕對路徑到現有文件。
例如,這不會做任何事:
var fs = require('fs');
fs.readFile('/home/test/file.txt', function(e, data) {
if (e) {throw e;}
console.log('here i am');
});
什麼情況是,沒有任何反應。如果我用正常的NodeJS代碼運行代碼,那麼它輸出「我在這裏」,但如果我通過vm
模塊運行該代碼,則什麼也不會發生。回調函數根本就不會被調用,因爲出於某種原因它無法找到該文件,而且似乎也沒有任何超時。
我該如何讓Node瞭解執行的代碼是一些「文件」,並使fs
模塊功能正常工作?我試着指定vm.runInThisContext(code, filename)
的第二個參數,但我沒有看到任何區別。看起來Node幾乎不關心第二個參數。
你的意思是require.paths.unshift => http://stackoverflow.com/questions/5390886/nodejs-require-paths-resolve-problem – Alfred
我沒有觸及任何與需求相關的東西。 – Tower
你的意思是vm.runInThisContext(code,'/ home/full/path/to/file.js')不起作用? – Alfred