我应该忽略测试吗?


91

我到底应该输入什么.npmignore

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

我对此没有任何指导。


4
应忽略在不需要的时候有人叫一切npm install yourlibrary,例如.travis.yml.jshintrc
兰特

真?甚至自述文件?官方推荐在任何地方吗?
callum

2
无论.npmignore"files"docs.npmjs.com/files/package.json#files),都会自动包含README 。
尼古拉斯Fantone

Answers:


86

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

关于应该永远存在的东西并没有多少官方信息,因为它基本上是的子集.gitignore,但是从我使用节点5年的经验中得出的结论,这就是我的想法。

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


发行前的交叉编译源

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

构建文件剩余

  • 优点:使用类似工具的人node-gyp可能会在构建期间生成目标文件,而这些文件永远都不会进入软件包。
  • 缺点.gitignore无论如何这应该总是存在的。如果您.npmignore已经在使用文件,则必须将这些内容放在此处,因为.gitignore从npm的角度来看,它已被覆盖。

测验

  • 优点:生产代码中的行李少。
  • 缺点:您不能在实时环境中运行测试,因为系统特定的故障很少,例如正在运行的节点版本过旧会导致测试失败。

持续集成设置/元文件

  • 优点:同样,行李少。.travis.yml使用,测试或查看代码不需要执行诸如此类的操作。

非自述文档和代码示例

  • 优点:行李少。在思想流派中有些人存在,如果您不能在自述文件中至少表达最低限度的可行功能,则您的模块太大。
  • 缺点:人们无法在自己的文件系统上看到详尽的文档和代码示例。他们将不得不访问存储库(这也需要Internet连接)。

Github页对象

  • 优点:如果您使用模块同时充当存储库的职责,那么您当然不需要用CNAME文件或占位符乱抛垃圾。index.htmlgh-pages

bower.json和朋友

  • 优点:如果您决定在发布之前内置依赖项,则不需要最终用户安装bower,然后再安装更多东西。我个人将这些东西放在包装中。当我执行时npm install,我应该只依赖npm,而不能依赖其他外部资源。

基本上,如果您希望将某些东西排除在npm软件包之外而不将其排除在npm存储库之外,则应该使用它。它不是一长串的项目,但是npm宁愿内置功能而不是让人们将无关的对象卡在包装中。


没有办法从package.json文件中删除不可用的脚本。例如测试脚本?我要删除所有内容,但将脚本保留在文件中有点混乱……
inf3rno

不,那里没有。您可能会从package.json中忽略它们,因为这主要是针对NPM的,如果您仅运行测试,则可以通过原始命令访问它们以运行它们。
SamT '16

63

我同意lante简短简短的回答SamT的大回答

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

我对这些答案的贡献:

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

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

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


3
...更不用说更容易记住且更不易发生意外了(如果您像我一样健忘的话)。感谢您的提示,这很棒。
康纳

2
我喜欢这种方法。
布雷迪·霍尔特

2
我认为您甚至可以忽略“ index.js”,前提是它是package.json中的“主”文件:)
Ben George

忽略图像和不必要的文档就可以了。但是忽略测试可能不是一个好主意。下载一些额外的KB并不需要花费很多时间,并且npm test在所有node_modules上进行递归可以给您一个提示,即某些操作在特定环境中是否有所不同。
adelriosantiago

3
@NicolásFantone的文件属性接受水珠图案为好。因此我们可以不创建而忽略测试文件.npmignorefiles: ["lib", "!lib/**/*.test.js"]。:)
Sureshraj

15

为了澄清起见,只要有人这样做npm install your-librarynpm都会下载回购中包括的所有源文件,但您包含在中的文件除外.npmignore

知道安装库的人员只需要运行您的库即可,不需要任何其他操作。

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

.npmignore 可以让您的npm软件包包含的文件更少,并且下载速度更快


1
这里的观点很好,但需要澄清:.npmignore它不直接影响下载内容,而是影响npm发布和上载时打包内容。这间接会创建较小的文件以供下载。
马克·斯托斯伯格

2

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.