本文的翻译于<<Effective TypeScript>>, 特别感谢!! ps: 本文会用简洁, 易懂的语言描述原书的所有要点. 如果能看懂这文章,将节省许多阅读时间. 如果看不懂,务必给我留言, 我回去修改.
技巧45:将ts 和 @types放入devDependencies
npm作为node的包管理真是无处不在。npm管理的包也分为几种类型:
-
dependencies:
js代码运行所需要的依赖。例如lodash。
-
devDependencies:
开发以及测试阶段依赖的库。和dependencies不一样的是:它里面的库不会随着软件安装包安装。
-
peerDependencies:
这些是运行时需要的包,但不想负责跟踪。典型的例子是一个插件。您的jQuery插件与jQuery本身的一系列版本兼容,但您更希望用户选择一个,而不是您自己选择。
dependencies和devDependencies是最常见的。当你使用ts时,你就要分清:ts到底安装在那个依赖?由于ts是开发用的工具,在js运行时不存在。所以ts应该属于devDependencies依赖
当然你也可以安装系统范围的ts,但是这样做有几个缺点:
- 不能保证你的合作者拥有相同的ts版本
- 为项目设置添加了一个额外的步骤。
所以我们应该将ts放入devDependencies依赖。这样既能保证和合作者有相同ts版本,又能像其他npm管理的包一样安装升级。想安装对应版本的tsc可以这样:
$ npx tsc
接下来我们该考虑@types了,当有些js库并不包含ts的类型声明,那我们就要自己安装。例如jQuery对应安装@types/jquery,lodash对应安装@types/lodash。这些@types仅仅包含类型声明,不包含实现。@types也应该放入devDependencies。例如:
$ npm install react
$ npm install --save-dev @types/react
你会发现package.json长这样:
{
"devDependencies": {
"@types/lodash": "^16.8.19",
"typescript": "^3.5.3"
},
"dependencies": {
"react": "^16.8.6"
}
}