2013-11-23 22 views
16

我一直认为npm test命令刚刚启动了我会写的package.json里面的脚本:{test:...} section。但是当它不起作用时,我有这个奇怪的错误。“npm test”如何工作?

所以,我有这一块配置的的package.json

"scripts": { 
    "start": "node index.js", 
    "test": "mocha tests/spec.js" 
} 

当我尝试运行测试中,我输入端子npm test和过这样的错误:

module.js:340 
    throw err; 
     ^
Error: Cannot find module 'commander' 

但一切当我输入mocha tests/spec.js时是OK。任何想法是为什么?

UPDATE:

我试图安装指挥官,我有一个错误找不到模块“水珠”。安装水珠后,我有错误:无法找到模块“../”

但实际上,问题是,为什么我有这些错误,为什么运行mocha tests/spec.js当一切OK?

+1

指挥官在你的文件系统中安装了哪里? – rninty

+0

它确实调用了package.json的scripts.test属性中指定的命令,但它也设置了某些环境变量,例如PATH,因此您可以引用仅存在于node_modules目录中但不是全局安装的命令。 – Brandon

+0

请确保将commander添加到您的package.json和'npm install'中::) –

回答

10

您可能安装了两个版本的摩卡:一个是全局的(npm install -g mocha),另一个是本地的,似乎已经损坏。

当您通过npm运行脚本,无论是作为npm run-script <name>或类似npm testnpm start定义的快捷键,您的当前包目录的bin目录放置在您的路径的前面。对于您的软件包,可能是./node_modules/.bin/,其中包含指向您包的可执行脚本mocha的链接。

rm -rf node_modules/mocha npm install --save-dev mocha

这应该让你摩卡工作本地副本与它的依赖性(司令等:

则很可能通过删除本地摩卡与--save-dev的重新安装解决这个问题)安装。

+0

谢谢!我发现这个答案是因为'npm help test'说:'如果提供了一个包,就运行一个包的“测试”脚本。“但是并没有说出”“测试脚本”在文件系统上的位置!很高兴知道它在我的“当前包目录的'bin'目录中”,就像你在这里说的那样! –