我应该。我的测试吗?

时间:2014-08-04 18:06:00

标签: node.js npm npmignore

我究竟应该放入.npmignore

测试?像.travis.yml.jshintrc这样的东西?运行模块时不需要的任何东西(自述文件除外)?

我找不到任何指导。

4 个答案:

答案 0 :(得分:78)

正如你可能发现的那样,NPM并没有真正具体说明应该在那里发生什么,而是他们有一个list of ignored-by-default files。如果.gitignore不存在npm,则.npmignore中的所有内容都会被.gitignore忽略,因此很多人甚至不会使用它。此外,默认情况下,无论设置如何,都会忽略许多文件,并且总会排除某些文件被忽略,如上面的链接所示。

关于什么总是应该存在的官方并不多,因为它基本上是.coffee的一个子集,但是从我使用节点收集到的5-ish年,这里是我&#39我们想出来了。

注意:通过生产我的意思是任何时候你的模块被某人使用而不是在模块本身上开发。


预发布交叉编译源

  • 优点:如果您使用的是交叉编译成JavaScript的语言,您可以在发布之前进行预编译,不要在程序包中包含node-gyp文件,但要在git存储库中跟踪它们

构建文件剩余部分

  • 优点:使用.gitignore之类的内容的人可能会在构建期间生成的对象文件永远不会进入包中。
  • 缺点:无论如何,这应始终进入.npmignore。如果您使用的是.gitignore文件,则必须将这些内容放在此处,因为它会从npm的角度覆盖.travis.yml

测试

  • 优点:减少生产代码中的行李。
  • 缺点:如果存在系统特定的故障,例如运行的节点过时导致测试失败,则无法在实时环境中运行测试。

持续集成设置/元文件

  • 优点:再次减少行李。使用,测试或查看代码不需要CNAME之类的内容。

非自述文档和代码示例

  • 优点:减行李。有些人存在于思想学校中,如果你不能在自述文件中表达至少最小的可行功能,那么你的模块就太大了。
  • 缺点:人们无法在自己的文件系统上看到详尽的文档和代码示例。他们必须访问存储库(这也需要互联网连接)。

Github-pages objects

  • 优点:如果您使用模块提供双重任务,您当然不需要使用index.html文件或占位符gh-pages来放置您的版本。 npm install存储库。

bower.json和朋友

  • 优点:如果您决定在发布之前构建依赖项,则不需要最终用户安装bower,然后安装更多内容。我个人会把这些东西放在包里。当我做{{1}}时,我应该只依赖于npm,而不是其他外部来源。

基本上,如果您希望保留npm包之外的某些内容但不在npm存储库之外,则应该使用它。它不是一个很长的项目列表,但是npm宁愿构建功能而不是让人们在他们的包中遇到无关的对象。

答案 1 :(得分:54)

我同意lante's short and syntetic answerSamT's big answer

  • 您不应将测试包含在包中。
  • 您的包应该只包含生产运行时文件。
  • 这将使您的软件包更简单,更快速下载。

我对这些答案的贡献:

.npmignore是实现包文件选择的黑名单方式。但是以更实际的方式,您可以将白名单文件包含在package.json中的包using the files field中:

{
  "files": [
    "lib/",
    "index.js"
  ]
}

我认为这样更简单,面向未来并具有更好的语义;)

答案 2 :(得分:15)

只是澄清一下,只要有人npm install your-library npm ,就会下载repo包含的所有源文件,但.npmignore中包含的文件除外。

知道安装你的图书馆的人只需要你的图书馆运行,其他任何东西都是不必要的。

例如,当某人安装了某个库时,可能他/她不关心您的.travis.yml或您的.jshintrc文件,甚至一些图像,Grunt文件,文档等。

.npmignore可以让你的npm包文件更少,下载速度更快

答案 3 :(得分:1)

不包括您的测试。通常,测试的大小约为实际代码库大小的5倍。只要您的测试是在Github等上进行的,就足够了。

但是您绝对应该做的是以发布的格式测试您的NPM软件包 。创建一些驻留在实际代码库中但不属于测试套件的烟雾测试。

您可以在将其打包后对它进行测试,以了解有关测试的信息: https://github.com/ORESoftware/r2g

How to test an `npm publish` result, without actually publishing to NPM?