2017-07-18 61 views
12

我在我的项目中使用TypeScript 2。我想使用一些js库,但也需要使用该库。我可以用简单的npm install @types/some-library安装类型。我不知道我是否应该--save--save-dev他们。在我看来,即使DefinetelyTyped GitHub自述类型提到了两种版本,但从来没有解释它们。我认为@types应该在devDependencies中,因为开发需要类型,并且不会在运行时使用,但我在dependencies中看到了很多次@types。我很困惑。如何判断@ types/*是否进入依赖关系或devDependencies?

如何判断@ types/*是否进入dependenciesdevDependencies?实际上是否有一些或多或少的官方指示?

+0

您是生成一个包还是这个包会被其他人使用?正如我所看到的,在后一种情况下,您只需要区分'dependencies'和'devDependencies'。 – Valentin

+0

我从头开始在js/ts中制作一些游戏。我用webpack捆绑所有东西。 atm没有后端,但有可能我会将它全部封装在Electron中,以便有一天它可以独立运行。我认为任何人都不会将它用作他们自己的应用程序的依赖,但我想这可能是可能的(想想GTA游戏中的迷你游戏;我的游戏是开源的)。不过,我想学习并遵循最佳做法,这是我制作该游戏的主要原因。我希望我能够很好地澄清我的用例。 :) – kamyl

+1

是的,它是有道理的,只是想确保我的原始答案与您的使用案例相关。我仍然认为'devDependencies'和'dependencies'之间的区别在构建一个bundle时是无关紧要的,它也是'create-react-app'强制执行的东西[https://stackoverflow.com/a/44872787/1333383 )但最终取决于你选择 – Valentin

回答

11

假设你正在开发一个包含devDependencies中的@ types/some-module软件包的软件包“A”。出于某种原因,你从@类型/一些模块输出类型

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

    } 
} 

眼下打字稿消费者包装的“A”是无法猜测SOMETYPE是什么,因为包devDependencies“A”未安装。

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

+1

所以你暗示,如果我只在实现中使用类型,它的类型定义可以是'devDependencies'? –

+1

是@FranklinYu。只要类型出现在声明文件中,就需要将它放在'dependencies'上。否则'devDependencies'很好 – wookieb

6

您是否正在生成捆绑包?如果是这样,我建议不要花太多时间辩论什么地方。 devDependenciesdependencies仅在您发布可供其他人使用的软件包且您不希望以无用的依赖关系发送垃圾邮件时才有意义。

TL; DR将它放入devDependencies。就像你说的“开发所需的类型,不在运行时使用”

相关问题