在npm包中排除测试代码?

Eri*_*ock 33 node.js npm

npm的package.json文档的devDependencies部分说明了列出你的测试依赖项,以便你的包的用户不必删除额外的依赖项..npmignore在这种情况下,还添加我的测试目录是否有意义?

ale*_*lex 37

是的,大多数人都这么做,这里有一些流行的Node.js模块的npmignore文件:

https://github.com/LearnBoost/socket.io/blob/master/.npmignore

其他人将他们想要发布的内容列入白名单package.json files:

https://github.com/senchalabs/connect/blob/master/package.json
https://github.com/strongloop/express/blob/master/package.json

  • 我建议如果人们想要为我的模块/包运行测试,他们实际上会花时间克隆我的repo并运行`npm install`,这样他们就可以得到所有实际的开发依赖项.当您开始依赖于某个模块时,它会占用大量时间,该模块恰好有大约20兆字节的自动生成的测试代码发布到npm(例如,moment-timezone <= 0.0.3),以及一堆我不需要的测试框架为了使用该模块. (23认同)
  • 有些人可能会发现将测试保留在那里是有用的,这样人们可以做`npm测试模块`,如果由于某种原因某些东西不起作用,他们想测试他们正在使用的模块. (3认同)
  • 第一个链接坏了 (3认同)

tco*_*bbs 16

我在任何地方都找不到明确提到的一件事是 package.json 中的“文件”条目支持使用!条目上的前缀。例如,我有一个“文件”条目,如下所示:

{
  "files": [
    "lib/**/*",
    "!lib/**/*.map"
  ],
}
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我的 lib 目录包含我不想包含在包中的 .map 文件,并且这包括除 *.map 文件之外的所有内容。

  • 是的,它说,“文件模式遵循与 .gitignore 类似的语法,但相反......”由于 .gitignore 允许 bang 字符,我尝试了一下,它对我有用。我不知道为什么它不适合你。 (2认同)

a.b*_*eri 5

另一种方法是使用lib文件夹并将所有内容存储在其中。然后您可以将您配置package.json为仅考虑该文件夹。

为了工作,您还需要将主文件移动到里面lib并在package.json. 请参阅下面的示例:

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

这篇好文章提供了更多信息