我如何判断@ types / *是否进入`dependencies`或`devDependencies`?

时间:2017-07-18 20:40:55

标签: typescript npm typescript-typings package.json

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

我应该如何决定@ types / *是进入dependencies还是devDependencies?实际上是否有一些或多或少的官方指示?

3 个答案:

答案 0 :(得分:55)

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

导出类型
import {SomeType} from 'some-module';
export default class APackageClass {
     constructor(private config: SomeType) {

     }
}

现在,包“A”的Typescript使用者无法猜出SomeType是什么,因为未安装包“A”的devDependencies。

在这种特殊情况下,您需要将@ types / *包与常规“依赖”放在一起。对于其他情况,“devDependencies”足够好了。

答案 1 :(得分:26)

您是否正在生成捆绑包?如果是这样的话,我建议不要花太多时间来讨论那里发生的事情。 devDependenciesdependencies只有在您发布可供其他人使用的软件包并且您不希望使用无用的依赖项对其进行垃圾邮件时才有意义。

将其放入devDependencies。就像你说的那样“开发需要类型,而不是在运行时使用”

答案 2 :(得分:8)

在将Node.js应用程序部署到生产的特定情况下,人们只想安装运行该应用程序所需的依赖项。 (使用const changeOpacity = () => { window.onscroll = e => { console.log(`hello ${e.detail}`); }; } //Init the event handler changeOpacity(); //Fire some scroll events to test our handler for(let i = 0; i < 10; i += 1) { window.dispatchEvent(new CustomEvent('scroll', { detail: `scroll event ${i}` })); }npm install --productionnpm ci --production。)在这种情况下,类型应在yarn production中,以防止它们使安装过时。

备注:我知道Brad Wilson在对另一个答案的评论中提到了这一点。不过,这一点似乎值得回答。