2017-04-21 30 views
1

就这一点而言,摩卡在devDependencies(如教程)中所说的足够符合逻辑,毕竟它是dev的依赖关系。为什么摩卡需要在devDependencies中?

但实际上你安装它-g所以你可以运行摩卡作为一个命令。就我所知,鉴于这一点,它在package.json中提到的没有任何区别。

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

+1

你可以叫摩卡可执行从节点模块,或以编程方式与摩卡的配置工作,也锁定整合版本 – Gntem

回答

3

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

对于新开发人员来说,快速构建和运行项目以及运行测试的可能性之一是很大的帮助。为了做到这一点,您可以提供一种安装开发人员为了为项目做出贡献的所有工具的简单方法。

这包括:

  • 构建工具
  • 测试工具
  • 代码质量工具(棉短绒)

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


最重要的是,它是非常有用的编辑package.json提供有用的scripts这样就可以,例如,运行npm test。这是常见的指定是这样的:

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

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

+0

该死,打我吧 – slebetman

4

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

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

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

+1

可能有助于说明,对于本地依赖项,您需要每次都使用相对路径运行摩卡,而不是在使用全局配置时使用“mocha”。 –

+2

@ ssc-hrep3:当然,尽管现在人们总是倾向于使用npm脚本和其他任务运行者...... :-) –

2

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

Npm对此有特别的支持。如果你在的package.json如下:

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

则可以执行npm test即使你没有摩卡全球的装机量也。

那么,这有什么用?首先,如果与其他开发人员协作,这是一件很好的事情 - 他们不需要做任何超过npm install的设置开发环境。

其次,我认为更有用,这是很容易将项目与其他工具一样Travis

+1

当然,使用Travis等工具是很好的,因为他们每运行一次测试时间你推动你的回购变化,但对我个人而言,我只是想在Github上拥有那些奇特的构建徽章:D – slebetman