为什么摩卡需要在devDependencies中?

就这一点而言,摩卡在devDependencies中像教程所说的那样足够合乎逻辑,毕竟它是一个dev的依赖。

但实际上,你安装它,所以你可以运行摩卡作为一个命令。 而且据我所知,在package.json中提到这一点是没有什么区别的。

那么有没有必要明确列出它?

如果您正在开发一个开源项目,您的目标之一就是让其他开发人员能够快速开始贡献。

其中一个很有用的事情是新开发人员能够快速构build和运行项目,并运行testing。 为了做到这一点,你可以提供一个简单的方法来安装开发人员应该为项目做贡献的所有工具。

这包括:

  • 构build工具
  • testing工具
  • 代码质量工具(linter)

另一方面,你的项目的用户可能不会需要任何的,这是拆分dependenciesdevDependencies一个很好的理由。


最重要的是,编辑你的package.json来提供有用的scripts非常有用,例如,你可以运行npm test 。 指定类似的东西很常见:

 { ... "scripts": { ... "test": "mocha -opts mocha.opts ...tests..." } } 

然后npm test将从您的node_modules运行特定的mocha

如果您在全球范围内安装,那么您的所有项目都是单一版本。

如果是开发依赖项,则每个项目都可以使用特定于该项目的版本,并且项目可以以受控方式迁移到较新的版本。

与其他模块加载项目特定而不是全局加载相同的论点。

因为你不需要运行摩卡作为命令。 你可以像node_modules那样运行它: ./node_modules/.bin/mocha

Npm对此有特别的支持。 如果您在package.json中有以下内容:

 "scripts": { "test": "mocha" }, "devDependencies": { "mocha": "*" } 

那么即使你没有全球安装mocha,你也可以执行npm test

那么,这有什么用呢? 首先,如果与其他开发者合作,这是一件好事,他们不需要做任何比npm install更多的工作来设置开发环境。

其次,我认为更有用,这是否可以很容易地将您的项目与其他工具,如特拉维斯等