“npm test”如何工作?

我一直认为npm test命令只是启动我将在脚本中的package.json中写入的内容:{test:…}部分。 但是,当它不起作用时,我有这个奇怪的错误。

所以,我在package.json中有这个configuration

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

当我尝试运行testing时,在terminalinputnpm test ,并发生这个错误:

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

但是,当我只键入mocha tests/spec.js时,一切正常。 任何想法是为什么?

更新:

我试图安装指挥官,我有一个错误无法find模块'glob' 。 安装glob后,我有错误:找不到模块'../'

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

你可能有两个版本的摩卡安装:一个全球性( npm install -g mocha )和一个本地,似乎被打破。

当您通过npm运行脚本时,无论是npm run-script <name>还是使用定义的快捷方式(如npm testnpm start ,当前的程序包目录的bin目录都位于path的前面。 对于你的软件包,可能是./node_modules/.bin/ ,它包含你的软件包的mocha可执行脚本的链接。

你可以通过删除当地的摩卡来解决这个问题,并用–save-dev重新安装:

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

这应该让你有一个工作的本地摩卡与所有的依赖关系(指挥官等)安装。