在npm包中排除测试代码?

47

npm的package.json文档中devDependencies部分指出,将测试依赖项列在那里,这样使用您的包的用户就不必下载额外的依赖项。在这种情况下,将我的测试目录添加到.npmignore中是否有意义?


请参考以下链接:https://dev59.com/Bl8f5IYBdhLWcg3wB-wU - Eric Bock
3个回答

49

3
有些人可能会发现在那里保留测试很有用,这样人们就可以在某些情况下使用“npm test module”来测试他们正在使用的模块,以解决某些问题。请注意,此处不提供额外的解释或信息。 - fent
31
我建议如果人们想要测试我的模块/包,他们应该花时间克隆我的存储库并运行“npm install”,以便获取所有实际的开发依赖项。如果你开始依赖于某个模块,它恰好在npm上发布了大约20MB的自动生成的测试代码(例如moment-timezone <= 0.0.3),以及一堆我不需要使用该模块的测试框架,那真是太糟糕了。 - Frost
3
第一个链接已经失效,请您尝试使用其他链接。 - realtebo

12

我在任何地方都没有明确提到过的一件事是,在package.json文件中,“files”条目支持在条目前添加“!”前缀。例如,我有一个看起来像这样的“files”条目:

{
  "files": [
    "lib/**/*",
    "!lib/**/*.map"
  ],
}

我这样做是因为我的lib目录包含一些.map文件,而我不想将其包含在软件包中。这将包括除*.map文件以外的所有内容。


这个有文档吗?我无法让它工作(npm v8),也找不到任何相关的文档。 - fgblomqvist
文件入口的语法与 .gitignore 相似,但是顺序相反。请参考:https://docs.npmjs.com/cli/v9/configuring-npm/package-json#files - tcobbs
它在npm 6中绝对有效,但我不确定是否已在npm 8中进行了测试。然而,即使上面的npm文档链接是针对v9的,v8文档也说了同样的事情(在链接中将v9替换为v8)。 - tcobbs
没有提到如何排除文件,只是说你可以使用类似于.gitignore的模式来包含文件。:/ - fgblomqvist
1
是的,它说:“文件模式遵循与 .gitignore 相似的语法,但是相反的...”由于 .gitignore 允许使用感叹号字符,我尝试了一下,并且对我起作用了。我不知道为什么它对你不起作用。 - tcobbs
!/src/**/__tests__/*.test.ts 对我有用。 - Philihp Busby

5
另一种方法是使用一个名为lib的文件夹,并将所有内容存储在其中。然后,您可以配置您的package.json只考虑该文件夹。
为了使其正常工作,您还需要将主文件移动到lib中,并在package.json中指定它。请参见下面的示例:
{
  "name": "your-package",
  "main": "./lib/index.js",
  "files": [
    "/lib"
  ]
}

更多信息可在这篇优秀文章中找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接