2012-05-11 38 views
3

我使用hubot(特别是hubot-hipchat)并且想要使用https://github.com/scriby/asyncblock节点模块。在hubot中导入/需要节点模块的正确方法是什么?如何为hubot设置node_path

我cd到我安装hubot(〜/ hubot)并做

编辑hubot/packages.json加入hubot-hipchat,asyncblock到依赖关系部分。

"dependencies": { 
    "hubot-hipchat": ">= 1.0.4", 
    "hubot": "2.1.4", 
    "hubot-scripts": ">=2.0.4", 
    "optparse": "1.0.3", 
    "asyncblock": "2.0.8" 
    } 

然后我做我的脚本/ test.coffee脚本如下:

asyncblock = require('asyncblock') 

当我开始hubot,我得到的错误:错误错误:无法找到模块 'asyncblock'

〜/ hubot/node_modules/asyncblock存在。于是我试着这样做:

require.paths.push('/home/ubuntu/hubot/node_modules') 

现在我没有得到找不到错误,但我得到一个新问题:

ERROR Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead. 

我在做什么错?

我只是想在Ubuntu的服务器上Exec中的系统命令,其中我有hubot运行:

asyncblock((flow) -> 
    exec('node -v', flow.add()) 
    result = flow.wait() 
    msg.send result 
) 

编辑: 所以如果我的NODE_PATH的环境变量设置为它的工作原理如下:

env NODE_PATH="/usr/lib/nodejs:/usr/share/javascript:/home/ubuntu/hubot/node_modules" 

为什么不按照惯例查看hubot/node_modules?

+0

我可以回答你的问题的一部分:'require.paths'在节点0.5已被删除。任何使用'require.paths.push'的文章或源代码都已过时。我假设你在Node 0.6.x上? –

+0

node -v:v0.6.17。是的,我知道它的弃用/删除。让我困惑的是为什么它在./node_modules中找不到模块 - 因为它发现我的其他模块(如hubot-hipchat)很好。 – rynop

回答

0

您的脚本与require('asyncblock')在哪里?它在~/hubot的子目录中吗?如果不是,则其require函数将不会显示在~/hubot/node_modules中。

检查该脚本中的值module.paths,查看脚本require看起来的所有非全局路径。

+0

我的coffeescript文件在〜/ hubot/scripts中。该脚本还使用hubot-hipchat(位于〜/ hubot/node_modules中)的方法。不知道为什么它找不到〜/ hubot/node_modules/asyncblock – rynop

+0

这里是否有任何符号链接?也就是说,'〜/ hubot/scripts'是一个真实的目录,是〜/ hubot/scripts/test.coffee'一个真实的文件吗?再次,请从'test.coffee'报告'module.paths'的值。 –

+0

〜/ hubot/scripts是一个真正的目录。 〜/ hubot/scripts/deploy.coffee(我的脚本)是一个符号链接,用于部署.coffee - > /home/ubuntu/git/mln-admin/hubot/scripts/deploy.coffee。然而,在这个脚本中,如上所述,我使用〜/ hubot/node_modules/hubot-hipchat /中的对象,例如 module.paths(有些不存在): /home/ubuntu/git/mln-admin/hubot /脚本/ node_modules,/家庭/ Ubuntu的/混帐/万管理员/ hubot/node_modules,/家庭/ Ubuntu的/混帐/万管理员/ node_modules,/家庭/ Ubuntu的/的git/node_modules,/家庭/ Ubuntu的/ node_modules,/home/node_modules,/ node_modules – rynop

-1

这样做更简单。我也使用hubot和hipchat。所有你需要做的是:

cd hubot-dir; 
npm install asyncblock 

下面是你应该注意的事项:

$ npm install asyncblock 
npm http GET https://registry.npmjs.org/asyncblock 
npm http 200 https://registry.npmjs.org/asyncblock 
npm http GET https://registry.npmjs.org/asyncblock/-/asyncblock-2.0.9.tgz 
npm http 200 https://registry.npmjs.org/asyncblock/-/asyncblock-2.0.9.tgz 
npm http GET https://registry.npmjs.org/fibers/0.6.7 
npm http GET https://github.com/scriby/UglifyJS/tarball/1.2.5-6 
npm http 200 https://registry.npmjs.org/fibers/0.6.7 
npm http GET https://registry.npmjs.org/fibers/-/fibers-0.6.7.tgz 
npm http 200 https://registry.npmjs.org/fibers/-/fibers-0.6.7.tgz 
npm http 200 https://github.com/scriby/UglifyJS/tarball/1.2.5-6 
npm http GET https://registry.npmjs.org/node-gyp 
npm http 200 https://registry.npmjs.org/node-gyp 
npm http GET https://registry.npmjs.org/node-gyp/-/node-gyp-0.4.5.tgz 
npm http 200 https://registry.npmjs.org/node-gyp/-/node-gyp-0.4.5.tgz 
npm http GET https://registry.npmjs.org/ansi 
npm http GET https://registry.npmjs.org/glob 
npm http GET https://registry.npmjs.org/graceful-fs 
npm http GET https://registry.npmjs.org/fstream 
npm http GET https://registry.npmjs.org/minimatch 
npm http GET https://registry.npmjs.org/rimraf 
npm http GET https://registry.npmjs.org/mkdirp 
npm http GET https://registry.npmjs.org/nopt 
npm http GET https://registry.npmjs.org/semver 
npm http GET https://registry.npmjs.org/tar 
npm http GET https://registry.npmjs.org/which 
npm http GET https://registry.npmjs.org/request 
npm http 200 https://registry.npmjs.org/ansi 
npm http GET https://registry.npmjs.org/ansi/-/ansi-0.0.4.tgz 
npm http 200 https://registry.npmjs.org/graceful-fs 
npm http GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.1.8.tgz 
npm http 304 https://registry.npmjs.org/mkdirp 
npm http 200 https://registry.npmjs.org/fstream 
npm http GET https://registry.npmjs.org/fstream/-/fstream-0.1.18.tgz 
npm http 200 https://registry.npmjs.org/rimraf 
npm http GET https://registry.npmjs.org/rimraf/-/rimraf-2.0.2.tgz 
npm http 304 https://registry.npmjs.org/nopt 
npm http 200 https://registry.npmjs.org/glob 
npm http GET https://registry.npmjs.org/glob/-/glob-3.1.9.tgz 
npm http 200 https://registry.npmjs.org/semver 
npm http GET https://registry.npmjs.org/semver/-/semver-1.0.14.tgz 
npm http 304 https://registry.npmjs.org/request 
npm http 200 https://registry.npmjs.org/minimatch 
npm http GET https://registry.npmjs.org/minimatch/-/minimatch-0.2.5.tgz 
npm http 200 https://registry.npmjs.org/which 
npm http 200 https://registry.npmjs.org/tar 
npm http GET https://registry.npmjs.org/which/-/which-1.0.5.tgz 
npm http GET https://registry.npmjs.org/tar/-/tar-0.1.13.tgz 
npm http 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.1.8.tgz 
npm http 200 https://registry.npmjs.org/ansi/-/ansi-0.0.4.tgz 
npm http 200 https://registry.npmjs.org/fstream/-/fstream-0.1.18.tgz 
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-2.0.2.tgz 
npm http 200 https://registry.npmjs.org/glob/-/glob-3.1.9.tgz 
npm http 200 https://registry.npmjs.org/minimatch/-/minimatch-0.2.5.tgz 
npm http 200 https://registry.npmjs.org/semver/-/semver-1.0.14.tgz 
npm http 200 https://registry.npmjs.org/which/-/which-1.0.5.tgz 
npm http 200 https://registry.npmjs.org/tar/-/tar-0.1.13.tgz 
npm http GET https://registry.npmjs.org/abbrev 
npm http GET https://registry.npmjs.org/lru-cache 
npm http GET https://registry.npmjs.org/inherits 
npm http GET https://registry.npmjs.org/inherits 
npm http GET https://registry.npmjs.org/inherits 
npm http GET https://registry.npmjs.org/block-stream 
npm http 304 https://registry.npmjs.org/abbrev 
npm http 200 https://registry.npmjs.org/inherits 
npm http GET https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz 
npm http 200 https://registry.npmjs.org/inherits 
npm http 200 https://registry.npmjs.org/inherits 
npm http 200 https://registry.npmjs.org/lru-cache 
npm http GET https://registry.npmjs.org/lru-cache/-/lru-cache-1.1.0.tgz 
npm http 200 https://registry.npmjs.org/block-stream 
npm http GET https://registry.npmjs.org/block-stream/-/block-stream-0.0.5.tgz 
npm http 200 https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz 
npm http 200 https://registry.npmjs.org/lru-cache/-/lru-cache-1.1.0.tgz 
npm http 200 https://registry.npmjs.org/block-stream/-/block-stream-0.0.5.tgz 

[email protected] install /tmp/hubot/node_modules/asyncblock/node_modules/fibers 
node ./build.js 

`linux-ia32` exists; skipping build 
[email protected] ./node_modules/asyncblock 
├── [email protected] 
└── [email protected] ([email protected]) 
0

这里的问题是,你正在引用未添加到您的项目中的NPM模块。从hubot文件夹的根目录运行以下代码:

npm install --save asyncblock 

这会将asyncblock作为依赖项保存在package.json文件中。 因此,如果您部署到heroku或开放班或任何其他云服务,该服务将知道自动下载该模块,使其可用于您的机器人。

完成上述任务

asyncblock= require 'asyncblock' 

正确使用咖啡脚本后