“npm”如何运行“npm test”?

42

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

所以,我在package.json中有这样一段配置:

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

当我尝试运行测试时,我在终端中输入 npm test,然后出现了以下错误:

当我尝试运行测试时,在终端中键入npm test,会出现以下错误:

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

但是当我只输入mocha tests/spec.js时,一切都正常。有什么想法为什么会这样?

更新:

我试图安装 commander,但出现了错误无法找到模块“glob”。在安装glob之后,我得到了以下错误信息:

错误: 找不到模块'../'

但实际问题是为什么会出现这些错误,而运行mocha tests/spec.js时一切正常呢?


1
指挥官在你的文件系统中安装在哪里? - rninty
1
它确实调用了 package.json 中 scripts.test 属性中指定的命令,但它还设置了某些环境变量,例如 PATH,因此您可以引用仅存在于您的 node_modules 目录中而不是全局安装的命令。 - Brandon
请确保在您的 package.json 文件中添加 commander 并执行 npm install 命令 : ) - Jeff Escalante
@rninty 我甚至不知道 commander 是什么,以及为什么我需要它。 - Vitalii Korsakov
@VitaliiKorsakov 这可能是您依赖的另一个软件包的依赖项。 - Alex Wayne
@AlexWayne,请阅读我的最后一个问题。 - Vitalii Korsakov
1个回答

27

你可能安装了两个版本的mocha:一个是全局安装的(npm install -g mocha),另一个是本地的,看起来已经损坏了。

当你通过npm运行脚本时,无论是作为npm run-script <name>还是使用像npm testnpm start这样的快捷方式,都会将当前包目录下的bin目录放在你的路径前面。对于你的包,这可能是./node_modules/.bin/,其中包含指向你的包的mocha可执行脚本的链接。

您可以通过使用--save-dev删除本地的mocha并重新安装它来解决此问题:

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

这应该可以让您拥有一个工作的本地副本mocha和所有依赖项(commander等)已安装。


2
谢谢!我找到了这个答案,因为npm help test说:如果提供了一个“test”脚本,则运行包的“test”脚本。但是它没有说“test”脚本在文件系统中的位置!很高兴知道它在我的“当前包目录的bin目录”中,就像你在这里说的一样! - Noah Sussman
4
你能告诉我 "npm test" 和 "npm run test" 之间的区别吗? - Medi
npm testnpm run test 的别名。 - Some random IT boy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接