106

我到底应该放.npmignore什么?

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

我找不到这方面的任何指导。

4

4 回答 4

91

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

关于应该始终存在的内容并没有太多官方说明,因为它基本上是.gitignore.

注意:生产是指有人使用您的模块而不是在模块本身上进行开发的任何时间。


预发布交叉编译源

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

构建文件剩余部分

  • 优点:使用类似之类的东西的人node-gyp可能会在构建过程中生成目标文件,这些文件永远不应该放入包中。
  • 缺点.gitignore:无论如何,这应该总是进入。如果你已经在使用一个文件,你必须把这些东西放在这里,因为它从 npm 的角度.npmignore覆盖。.gitignore

测试

  • 优点:生产代码中的包袱更少。
  • 缺点:您无法在实时环境中运行测试,因为系统特定故障的可能性很小,例如运行的节点版本过时导致测试失败。

持续集成设置/元文件

  • 优点:同样,行李更少。诸如.travis.yml使用、测试或查看代码不需要的东西。

非自述文件和代码示例

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

Github 页面对象

  • 优点:如果你使用你的模块作为存储库,你当然不需要在你的版本中乱扔CNAME文件或占位符。index.htmlgh-pages

bower.json 和朋友们

  • 优点:如果您决定在发布之前构建依赖项,则不需要最终用户安装 bower,然后使用它安装更多东西。就个人而言,我会将这些东西保存在包装中。当我做一个npm install时,我应该只依赖 npm 而没有其他外部资源。

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

于 2014-08-04T19:13:24.760 回答
70

我同意兰特简短而综合的答案SamT 的大答案

  • 你不应该在你的包中包含你的测试。
  • 您的包应该只包含生产运行时文件。
  • 这将使您的包更直接和更快地被下载。

我对这些答案的贡献:

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

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

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

于 2016-05-24T18:56:34.177 回答
16

澄清一下,任何时候有人这样做npm install your-librarynpm都会下载包中包含的所有源文件。那些包含在.npmignore包源代码文件中的文件在your-library发布lib时会被排除,因此用户your-library不会下载它们。

知道安装你的库的人只需要运行你的库,其他任何东西都不需要。

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

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

于 2014-08-04T19:12:59.633 回答
4

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

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

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

如何在不实际发布到 NPM 的情况下测试“npm 发布”结果?

于 2018-06-27T22:59:48.557 回答