我在Java中运行带有https://github.com/apigee/trireme的Node JS,在JVM中运行。我有一个看起来如下的目录:
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中找到该文件。 我不了解Node JS,所以我不熟悉模块加载。我已经尝试过设置NODE_PATH,只是为了获取
错误:无法找到模块'请求'
好像我无法从Trireme获得NODE_PATH,如果我覆盖它,Trireme就无法运行。我是如何在Trimere中加载Node JS模块的想法。任何帮助表示赞赏。
修改:我将需要更改为(' ./ somemodule / index.js'),这有效。所以设置NODE_PATH也可以完成这项工作。我刚发现错误来自缺少的依赖。
"dependencies": {
"request": "^2.49.0",
"tough-cookie": "^0.12.1"
},
我想出了处理它的最佳方法是安装Node JS + npm,并在节点/文件夹中调用npm install some_module。它会自动将some_module及其所有依赖项下载到我的节点/文件夹中。 不再需要错误。
答案 0 :(得分:2)
我没有指定该文件位于工作目录中。
require('./somemodule/index.js');
而不是
require('somemodule/index.js');
完成了这项工作。另一种可能性是将NODE_PATH环境变量设置为节点/文件夹,因此您可以不需要./
。
我还发现获取模块的最佳方法是使用npm安装它们而不是从git下载它们,因为后者不会下载任何依赖项。