我如何决定 @types/* 是进入 `dependencies` 还是 `devDependencies`?
How do I decide whether @types/* goes into `dependencies` or `devDependencies`?
我在我的项目中使用 TypeScript 2。我想使用一些 js 库,但也想为该库打字。我可以使用简单的 npm install @types/some-library
安装类型。我不确定我是否应该 --save
或 --save-dev
他们。在我看来,甚至 DefinetelyTyped GitHub 自述文件都提到了这两个版本,但从未解释过它们。我认为@types 应该在 devDependencies
中,因为类型是开发所必需的,在运行时不使用,但我在 dependencies
中看到了很多次@types。我很困惑。
我应该如何决定@types/* 进入 dependencies
还是 devDependencies
?到底有没有多少官方说明?
如果您只是生成一个包,则可能不需要区分 dependencies
和 devDependencies
。 npm
的这个特性在发布一个可以被其他人使用的包时通常很有用,你不想用冗余的依赖项向他们发送垃圾邮件。
可能还有其他用例,其中拆分依赖项可能会有所帮助,但除非您有明确的需求,否则我的建议是只选择其中一个并将所有内容放在那里。如果需要的话,之后拆分它们并不难。
这种实践 IRL 的一个著名示例是 create-react-app
,默认情况下,它创建的未弹出样板将所有内容都放在 dependencies
中,请参阅 this thread and
假设您正在开发一个包“A”,它在 devDependencies
中有 @types/some-module
个包。出于某种原因,您要从 @types/some-module
:
导出类型
import { SomeType } from 'some-module';
export default class APackageClass {
constructor(private config: SomeType) {
// …
}
}
目前,包“A”的 TypeScript 消费者无法猜测 SomeType
是什么,因为包“A”的 devDependencies
未安装 .
在那种特殊情况下,您需要 放置 @types/*
包含常规 dependencies
的包。对于其他情况 devDependencies
就足够了。
在将 Node.js 应用程序部署到生产环境的特定情况下,人们只想安装 运行 应用程序所需的依赖项。
npm install --production
或
npm ci --production
或
yarn --production
在那种情况下,类型应该在 devDependencies
中,以防止它们使安装膨胀。
(为了避免误会,--production
选项一定不能在构建应用程序的机器上使用,否则TypeScript编译器会报错。)
备注:我知道 Brad Wilson 在对另一个答案的评论中提到了这一点。不过,这一点似乎值得作为一个答案。
我在我的项目中使用 TypeScript 2。我想使用一些 js 库,但也想为该库打字。我可以使用简单的 npm install @types/some-library
安装类型。我不确定我是否应该 --save
或 --save-dev
他们。在我看来,甚至 DefinetelyTyped GitHub 自述文件都提到了这两个版本,但从未解释过它们。我认为@types 应该在 devDependencies
中,因为类型是开发所必需的,在运行时不使用,但我在 dependencies
中看到了很多次@types。我很困惑。
我应该如何决定@types/* 进入 dependencies
还是 devDependencies
?到底有没有多少官方说明?
如果您只是生成一个包,则可能不需要区分 dependencies
和 devDependencies
。 npm
的这个特性在发布一个可以被其他人使用的包时通常很有用,你不想用冗余的依赖项向他们发送垃圾邮件。
可能还有其他用例,其中拆分依赖项可能会有所帮助,但除非您有明确的需求,否则我的建议是只选择其中一个并将所有内容放在那里。如果需要的话,之后拆分它们并不难。
这种实践 IRL 的一个著名示例是 create-react-app
,默认情况下,它创建的未弹出样板将所有内容都放在 dependencies
中,请参阅 this thread and
假设您正在开发一个包“A”,它在 devDependencies
中有 @types/some-module
个包。出于某种原因,您要从 @types/some-module
:
import { SomeType } from 'some-module';
export default class APackageClass {
constructor(private config: SomeType) {
// …
}
}
目前,包“A”的 TypeScript 消费者无法猜测 SomeType
是什么,因为包“A”的 devDependencies
未安装 .
在那种特殊情况下,您需要 放置 @types/*
包含常规 dependencies
的包。对于其他情况 devDependencies
就足够了。
在将 Node.js 应用程序部署到生产环境的特定情况下,人们只想安装 运行 应用程序所需的依赖项。
npm install --production
或
npm ci --production
或
yarn --production
在那种情况下,类型应该在 devDependencies
中,以防止它们使安装膨胀。
(为了避免误会,--production
选项一定不能在构建应用程序的机器上使用,否则TypeScript编译器会报错。)
备注:我知道 Brad Wilson 在对另一个答案的评论中提到了这一点。不过,这一点似乎值得作为一个答案。