我正在尝试完成Node.io here的教程作业。我在运行内置模块时没有遇到任何问题:
echo "mastercard.com" | node.io -s pagerank
或者:
node.io query "http://www.reddit.com/" a.title
然而,当我尝试自己的模块时:
var nodeio= require('node.io');
exports.job = new nodeio.Job({
input: false,
run: function() {
this.emit('Hello World');
}
});
尝试运行:
node.io hello
我明白了:
ERROR: Failed to load job "hello". Please check that the job exists and compiles correctly.
调试给了我这个:
DEBUG: {"stack":"Error: Cannot find module 'node.io'\n at Function._resolveFilename (module.js:322:11)\n at Function._load (module.js:267:25)\n at require (module.js:351:19)\n at Object.<anonymous> (/Users/username/Documents/Nodejs/hello.js:1:75)\n at Module._compile (module.js:407:26)\n at Object..js (module.js:413:10)\n at Module.load (module.js:339:31)\n at Function._load (module.js:298:12)\n at require (module.js:351:19)\n at [object Object].loadJob (/opt/local/lib/node_modules/node.io/lib/node.io/processor.js:294:37)","message":"Cannot find module 'node.io'"}
我确定我做的事情很愚蠢。有什么想法吗?
我也试过这个:
.npm/node.io/0.2.9-4/package/bin/io -s hello.js
和
node_modules/node.io/bin/node.io -s hello.js
得到这个结果:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'node.io'
at Function._resolveFilename (module.js:322:11)
at Function._load (module.js:267:25)
at require (module.js:351:19)
at Object.<anonymous> (/Users/thaymore/.npm/node.io/0.2.9-4/package/bin/io:2:1)
at Module._compile (module.js:407:26)
at Object..js (module.js:413:10)
at Module.load (module.js:339:31)
at Function._load (module.js:298:12)
at Array.<anonymous> (module.js:426:10)
at EventEmitter._tickCallback (node.js:126:26)
答案 0 :(得分:5)
这是NPM如何安装包含node.io的模块的“功能”,以便稍后可以通过节点找到它。如果仔细查看堆栈,错误是节点无法找到node.io本身。最简单的解决方案是安装到您的主目录,因为默认设置知道如何从那里进行操作。使用“npm install node.io”而不使用-g选项。如果您使用-g,请准备好使用NODE_PATH或其他几个选项,请参阅communication from isaacs。无论哪种方式,“节点问候”现在都可以使用。
请注意,节点社区并不担心强烈的意见,在选择最适合您情况的技术解决方案时,其中大部分都可以被视为噪音。(/ p>
答案 1 :(得分:2)
我能够让它像这样运行:
$ npm install node.io
$ node_modules/node.io/bin/node.io -s test.js
Hello World!
test.js
只是:
var nodeio = require('node.io');
exports.job = new nodeio.Job({
input: false,
run: function () {
this.emit('Hello World!');
}
});
答案 2 :(得分:0)
我遇到了同样的问题,这对我有用。
NODE_PATH="$NODE_JS_HOME/lib/node_modules/";
export NODE_PATH
将上述内容放在/etc/profile
或~/.profile
NODE_JS_HOME
所在的位置node.js
edit:
此页面http://nodejs.org/api/modules.html还建议将node_modules
文件夹放入$NODE_PATH