节点:找不到模块(使用brew安装的节点)

我尝试运行我在节点中编写的脚本。 为了debugging并向您显示我的问题,我将脚本简化为:

#! /usr/bin/env node var prompt = require('prompt'); 

当我尝试运行我得到的脚本

 module.js:340 throw err; ^ Error: Cannot find module 'prompt' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/Users/derzyklop/S/dotfiles/bin/bugs:3:14) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) 

我试图用npm install prompt安装“prompt”,而用npm install prompt -g也是全局的。 但我的脚本仍然不起作用。

“提示”似乎被安装,因为npm list --depth=0给我

npm列表

npm list -g --depth=0给我

npm list -g

我通过brew安装了节点,所以接下来我尝试的是通过brew remove npm节点。 brew remove npmbrew remove node ,我从这里下载OSX的安装程序。 但是这并没有改变任何东西。

我没有想法。 为什么不能find模块? 是否有可能, npm list -g在脚本中的require(..)以外的其他path中search?


更新

脚本位于〜/ dotfiles / bin / myscript的个人bin文件夹中,通过export PATH=~/dotfiles/bin:$PATH添加到export PATH=~/dotfiles/bin:$PATH

我发现,require()search{prefix} / lib / node_modules中的全局模块,其中{prefix}npm config get prefix

所以我可以临时解决这个问题: require('/usr/local/lib/node_modules/prompt');

本地模块在./node_modules中search。 在我的情况下,这一定是〜/ dotfiles / bin / node_modules ,所以我做到了

 cd ~/dotfiles/bin/ npm install prompt 

并与此我可以使用require('prompt'); 在我的脚本。

所以问题是:我如何让我的节点脚本search{executing directory}/node_modules ? 还有:为什么require()不在/usr/local/lib/node_modules/

摩卡将在这里成为你的朋友,这是纠正这种情况的最快方法。 安装摩卡:

 $ npm install -g mocha 

你的testing脚本也是有问题的。 所以你可以使用下面的testing脚本: test.js

 var assert = require("assert") describe('Array', function(){ describe('#indexOf()', function(){ it('should return -1 when the value is not present', function(){ assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0)); }) }) }) 

那么运行起来很简单: mocha test.js

我testing了这一点,我收到了来自节点的错误。 即使你做node test.js你也会得到一个错误。 希望这个摩卡解决scheme适合你。

参考:1. http://visionmedia.github.io/mocha/