"files" 属性 在 package.json 中是必要的吗?

Is the "files" property necessary in package.json?

看起来包将包括所有文件(未被忽略),即使 package.json 没有 "files" 数组。

属性 有必要吗?

不一定,您可以使用 .npmignore 完成所有操作,因为除非另有说明,否则所有文件都会添加。

你可以看到更多here

当没有.npmignore文件时,将使用.gitignore的内容。因此,在将生成的目录(如 dist/ 添加到 .gitignore 时要小心,因为它们可能最终不在您的生产 tarball 中。当发生这种情况时,您可以使用 package.json 中的 "files" 数组来包含它们,因为永远不会排除该文件中的包含。

您可以将 package.json 中的 files property 视为应包含在 npm 版本中的所有文件的 允许列表 .npmignore 作为 拒绝列表 应该 包含的所有文件。

根据经验,对于我自己的项目,我通常使用:

  • files 当我的项目有很多辅助文件,如构建脚本、配置文件等,不需要包含在 npm 版本中时
  • .npmignore当只有几个这样的辅助文件时

在我看来,这两个选项在不同的场景下都有用。

This article makes a good argument 用于使用文件 属性(白名单,如 F Lekschas 所说),而不是使用 .npmignore。原因包括:

  • 使用 .npmignore 会导致 .gitignore 被忽略,这可能是 许多开发人员都出乎意料。
  • 开发人员通常将凭据保存在 用于开发目的的包,他们当然不想 将它们包含在生产包中。使用白名单技术 大大降低了意外包装东西的可能性,比如 这个。

Note that some files are included even if you don't whitelist them。其中包括:

package.json
README
CHANGES / CHANGELOG / HISTORY
LICENSE / LICENCE
NOTICE
The file in the “main” field

编辑以解决评论。