为什么mocha需要在devDependencies中?

时间:2017-04-21 11:04:01

标签: javascript node.js npm mocha

从表面上看,像教程所说的那样,mocha在devDependencies中是合乎逻辑的,它毕竟是一个dev依赖。

但实际上你安装它-g所以你可以运行mocha作为命令。据我所知,在你的package.json中提到它是完全没有区别的。

那么是否需要明确列出它?

3 个答案:

答案 0 :(得分:5)

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

其中一个有用的事情是新开发人员可以快速构建和运行项目,以及运行测试。为此,您可以提供一种简单的方法来安装开发人员应该拥有的所有工具,以便为您的项目做出贡献。

这包括:

  • 构建工具
  • 测试工具
  • 代码质量工具(linter)

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

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

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

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

答案 1 :(得分:4)

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

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

与其他模块加载项目特定而非全局模式的论点几乎相同。

答案 2 :(得分:2)

因为您不需要将mocha作为命令运行。您可以像node_modules一样从./node_modules/.bin/mocha运行它:"scripts": { "test": "mocha" }, "devDependencies": { "mocha": "*" }

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

npm test

即使您没有全局安装mocha,也可以执行npm install

那么,这个用途是什么?首先,如果您与其他开发人员合作,这是一件好事 - 他们不需要做{{1}}以外的任何事情来设置开发环境。

其次,我认为更有用,这使您可以轻松地将项目与Travis等其他工具集成。