我創建與node.js的運行外部腳本一個命令行接口的node.js需要在虛擬機腳本模塊
> myapp build "path/to/script.js"
MyApp的是一個應用程序的node.js執行作爲一個命令傳遞的腳本論據。
爲了使事情變得簡單,它基本上是:
var fs = require("fs"); // this works
var date = require("./date.js"); // supposed to load "path/to/date.js" but fails
我的問題是require()
沒有按」:
var vm = require("vm");
var fs = require("fs");
var code = fs.readFileSync(scriptPath, { encoding: "utf8" }); // read "path/to/script.js"
var script = vm.createScript(code, scriptPath);
var context = vm.createContext({ require: require });
script.runInNewContext(context);
的 「路徑/到/的script.js」 看起來像這樣的內容t在外部腳本中正常工作。它適用於像「fs
」這樣的「本地」模塊,但對本地文件失敗,可能是因爲它不知道在哪裏查找模塊。
我認爲簡單地使用下面的代碼:
require(scriptPath);
但我不能注入自己的腳本環境。
我可以寫我自己的require
功能模仿內置的要求,但在開始尋找scriptPath
的模塊,但似乎有點乏味......
var myLib = require(「./ myfile.js」); – dandavis
@dandavis如何,即使是遠程幫助... – Bart
我沒有看到你通過要求。我不知道這甚至是可能的。可能會嘗試使用{require:require.bind(this)}作爲上下文,但您可能還需要設置過程以及... – dandavis