我如何决定 @types/\* 是否进入 \`dependencies\` 或 \`devDependencies\`?

新手上路,请多包涵

我在我的项目中使用 TypeScript 2。我想使用一些 js 库,但也想使用该库的类型。我可以使用简单的 npm install @types/some-library 安装类型。我不确定我是否应该 --save--save-dev 他们。在我看来,即使是 DefinetelyTyped GitHub 自述文件,也提到了这两个版本,但从未解释过它们。我认为 @types 应该在 devDependencies 中,因为类型是开发所需的,并且不用于运行时,但我在 dependencies 中多次看到 @types 。我很困惑。

我应该如何决定 @types/* 是否进入 dependenciesdevDependencies ?实际上是否有一些或多或少的官方说明?

原文由 kamyl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

假设您正在开发一个包“A”,其中包含 @types/some-module 包在 devDependencies 中。出于某种原因,您要从 @types/some-module 导出类型:

 import { SomeType } from 'some-module';

export default class APackageClass {
  constructor(private config: SomeType) {
    // …
  }
}

现在,包“A”的 TypeScript 消费者无法猜测 SomeType 是什么,因为包“A”的 devDependencies 没有 安装。

在这种特殊情况下,您 需要@types/* 包与常规 dependencies 一起放置。对于其他情况 devDependencies 已经足够好了。

原文由 wookieb 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您只是生成一个捆绑包,则可能无需区分 dependenciesdevDependenciesnpm 的这个特性在发布一个可以被其他人使用的包并且你不想用冗余的依赖向他们发送垃圾邮件时通常很有用。

在其他用例中,拆分依赖项可能会有所帮助,但除非您对此有明确需求,否则我的建议是选择其中一个并将所有内容放在那里。如果需要的话,事后拆分它们并不难。

这种做法 IRL 的一个著名示例是 create-react-app ,默认情况下,它创建的未弹出样板将所有内容放在 dependencies 中,请参阅 此线程此答案

原文由 Valentin 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题