节点:找不到模块(使用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 list -g --depth=0
给我
我通过brew安装了节点,所以接下来我尝试的是通过brew remove npm
节点。 brew remove npm
和brew 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适合你。