2012-05-11 33 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' 

正確使用咖啡腳本後