我尝试运行我在节点中编写的脚本。为了调试并向您显示我的问题,我将脚本缩小为:
#! /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)
我试图安装&#34;提示&#34;使用npm install prompt
,全局使用npm install prompt -g
。但我的剧本仍然无效。
&#34;提示&#34;似乎已安装,因为npm list --depth=0
给了我
和npm list -g --depth=0
给了我
我通过brew安装了节点,所以我接下来尝试的是我通过brew remove npm
和brew remove node
删除了节点,并从here下载了OSX的安装程序。但这并没有改变任何事情。
我没有想法。为什么节点不能找到模块?
是否有可能npm list -g
在我的脚本中搜索除require(..)
之外的其他路径?
该脚本位于〜/ dotfiles / bin / myscript 中的个人bin文件夹中,该文件由export PATH=~/dotfiles/bin:$PATH
添加到$ PATH。
我发现,require()搜索 {prefix} / lib / node_modules 中的全局模块,其中 {prefix} 是npm config get prefix
。
所以我可以通过这样做来临时修复它:require('/usr/local/lib/node_modules/prompt');
。
在 ./ node_modules 中搜索本地模块。在我的情况下,这必须是〜/ dotfiles / bin / node_modules ,所以我做了
cd ~/dotfiles/bin/
npm install prompt
并且我可以在我的脚本中使用require('prompt');
。
所以问题是:我如何让我的节点脚本在{executing directory}/node_modules
中搜索模块?
仍然:为什么require()
没有在/usr/local/lib/node_modules/
中搜索?
答案 0 :(得分:-2)
$ npm install -g mocha
此外,您的测试脚本也存在问题。因此,您可以使用以下内容制作测试脚本: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
我对此进行了测试,并且我从节点收到了与您相同的错误。即使你node test.js
,你也会收到错误。希望这个摩卡解决方案适合您。
Refrences: 1. http://visionmedia.github.io/mocha/