我应该.我的测试吗?

cal*_*lum 87 node.js npm npmignore

我究竟应该投入.npmignore什么?

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

我找不到任何关于此的指导.

Sam*_*amT 82

正如您可能发现的那样,NPM并没有真正具体说明应该在哪里,而是它们有一个默认忽略文件列表.许多人甚至不使用它,因为默认情况下,如果不存在,您的所有内容都将.gitignore被忽略.此外,默认情况下,无论设置如何,都会忽略许多文件,并且一些文件总是被排除在外,因为如上面的链接所示.npm.npmignore

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

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


预发布交叉编译源

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

构建文件剩余部分

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

测试

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

持续集成设置/元文件

  • 优点:再次减少行李.诸如.travis.yml使用,测试或查看代码不需要的东西.

非自述文档和代码示例

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

Github页面对象

  • 优点:如果您使用模块也可以将双重任务用作存储库,那么您当然不需要使用CNAME文件或占位符来丢弃您的版本.index.htmlgh-pages

bower.json和朋友们

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

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


Yve*_* M. 56

我同意lante的简短同步答案以及SamT的大答案:

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

我对这些答案的贡献:

.npmignore是实现包文件选择的黑名单方式.但是以更实际的方式,您可以使用 package.json中的files字段将您需要包含的文件列入白名单:

{
  "files": [
    "lib/",
    "index.js"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为这更简单,未来证明并且具有更好的语义;)

  • @NicolásFantone **files** 属性也接受 **glob** 模式。因此我们可以忽略测试文件而不创建`.npmignore`。`文件:[“lib”,“!lib/**/*.test.js”]`。:) (5认同)
  • ...更不用说更容易记住和更少意外使用(如果你尽可能健忘).谢谢你的提示,这很棒. (3认同)
  • 我喜欢这种方法. (2认同)
  • 我认为你甚至可以省略"index.js",假设它是你的package.json中的'main'文件:) (2认同)

lan*_*nte 15

只是为了澄清,只要有人这样做npm install your-library,npm将下载repo包含的所有源文件,除了你在你的文件中包含的文件.npmignore.

要知道安装库的人只需要运行您的库,其他任何东西都是不必要的.

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

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

  • 这里的情绪很好,但需要澄清的是:`.npmignore` 不会直接影响*下载* 的内容,它会影响*npm 发布* 和上传时进入你的包的内容。这会间接地创建较小的文件来下载。 (2认同)

Ale*_*lls 5

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

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

您可以在此处阅读有关打包后测试软件包的信息: https: //github.com/ORESoftware/r2g

如何测试“npmpublish”结果,而不实际发布到 NPM?