将配置添加到 package.json 有什么好处?

What are the benefits of adding configs to package.json?

我总是在我的前端项目中将不同的 "tooling configurations" 放在他们自己的文件中。

例如:babel.config.js 中的 babel,jest.config.js 中的 jest,.eslintrc.json 中的 eslint,等等

不过我最近注意到,可以将其中许多配置直接放在项目 package.json 文件中。

我在网上进行了一些调查并询问了一些同事,但似乎没有人能给我一个明确的答案,说明为什么人们可能更喜欢一种方法而不是另一种方法。

这纯粹是偏好问题吗?

我的建议是避免使用自定义配置填充 package.json,主要有两个原因。

首先是关于开发人员的期望。将自己置于一个刚刚开始使用 JavaScript 和 NPM 生态系统的人的位置,您会看到一些没有记录的东西,至少不是您期望的地方。这种体验很容易让人们望而却步,尤其是当他们来自更严格的开发平台和语言时。

其次,关键字冲突或更重要的是认为这种情况是可能的。我们不希望 NPM 考虑在将来不使用某些关键字,只是因为一些闪亮的新库也在使用它,对吗?

另一方面,为 babel、browserlist、postcss 提供专用文件是一种更简单、不言自明的方法,这些项目中的每一个都已经建议使用专用文件进行配置。

我认为让 package.json 文件变得更复杂没有任何好处,如果你制作单独的文件,你会做出声明,并且人们会更好地理解项目,这没有任何理由

以下是 package.json 配置 IMO 的优点和缺点:

Pro package.json 成为您的应用程序包、脚本和现在的配置的单一真实来源。这是与您的应用相关的所有内容的一站式服务。

Pro 它会整理您的根目录。为所有不同的包浮动一个单独的配置文件会变得混乱。

Con 关键字冲突的可能性。如果 Node 推出的新关键字恰好与现有包配置相匹配,那么您要么不使用该关键字,要么将配置移动到单独的文件中。

Con 大多数包文档在其示例中引用单独的配置文件。这可能会让故障排除或新团队成员感到困惑。

Con 您的 package.json 文件可能会变得很大。如果管理了许多配置,则与其他团队成员发生合并冲突的可能性会大大增加。

总的来说,这取决于个人喜好。有一些工具,如 husky (https://github.com/typicode/husky) 默认将配置放在 package.json 中。我们的团队将两者结合起来。