2015-06-06 160 views
2

我在JVM內部運行來自Java的帶有https://github.com/apigee/trireme的Node JS。我有一個目錄,看起來如下:節點JS Trireme包含模塊

node/ 
-test_file.js 
-test_somemodule.js 
-somemodule/ 
-somemodule/index.js 
-somemodule/... 

我使用此代碼運行test_file.js沒有問題:

@Test 
public void shouldRunTestScript() { 
    try { 
     NodeEnvironment env = new NodeEnvironment(); 
     // Pass in the script file name, a File pointing to the actual script, and an Object[] containg "argv" 
     NodeScript script = env.createScript("my-test-script.js", 
       new File(Settings.getInstance().getNodeDir() + "/my-test-script.js"), null); 
     // Wait for the script to complete 
     ScriptStatus status = script.execute().get(); 
     // Check the exit code 
     assertTrue("Exit code was not 77.", status.getExitCode() == 77); 
    } catch (NodeException | InterruptedException | ExecutionException ex) { 
     Logger.getLogger(TriremeTest.class.getName()).log(Level.SEVERE, null, ex); 
     fail("Trireme triggered an exception: " + ex.getMessage()); 
    } 
} 

在文件test_somemodule.js我包括index.js。

require('somemodule/index.js'); 

當我嘗試運行該文件時,它無法在require中找到該文件。 我不知道節點JS,所以我不熟悉模塊加載。我已經嘗試設置NODE_PATH,只拿到

Error: Cannot find module 'request'

好像我無法從三列槳座戰船的NODE_PATH,如果我將其覆蓋,三列槳座戰船無法運行。我對如何獲得在Trimere中加載的Node JS模塊沒有想法。任何幫助讚賞。

編輯:我將require改爲('./somemodule/index.js'),它工作。所以設置NODE_PATH也會完成這項工作。我剛剛發現錯誤來自缺失的依賴關係。

"dependencies": { 
"request": "^2.49.0", 
"tough-cookie": "^0.12.1" 
}, 

我想出了對付它正在安裝節點JS + NPM,並調用NPM在節點/文件夾中安裝some_module的最佳途徑。它會自動將some_module及其所有依賴項下載到我的節點/文件夾中。 不再需要錯誤。

+0

編輯實際上回答你的問題,不是嗎? :P –

+0

@ E_net4是的,它的確如下:D你會推薦創建一個答案還是隻是讓問題保持原樣? – Zackline

+1

不要**留下問題,因爲它是。將答案部分移至您自己的答案。 –

回答

1

我沒有指定該文件在工作目錄中。

require('./somemodule/index.js'); 

代替

require('somemodule/index.js'); 

做的工作。另一種可能性是將NODE_PATH環境變量設置爲節點/文件夾,因此您可以在不需要./的情況下執行此操作。

我還發現獲取模塊的最好方法是使用npm安裝它們,而不是從git下載它們,因爲後者不會下載任何依賴項。