[译]<<Effective TypeScript>>技巧45:将ts 和 @types放入devDependencies

602 阅读1分钟

本文的翻译于<<Effective TypeScript>>, 特别感谢!! ps: 本文会用简洁, 易懂的语言描述原书的所有要点. 如果能看懂这文章,将节省许多阅读时间. 如果看不懂,务必给我留言, 我回去修改.

技巧45:将ts 和 @types放入devDependencies

npm作为node的包管理真是无处不在。npm管理的包也分为几种类型:

  1. dependencies:

    js代码运行所需要的依赖。例如lodash。

  2. devDependencies:

    开发以及测试阶段依赖的库。和dependencies不一样的是:它里面的库不会随着软件安装包安装。

  3. peerDependencies:

    这些是运行时需要的包,但不想负责跟踪。典型的例子是一个插件。您的jQuery插件与jQuery本身的一系列版本兼容,但您更希望用户选择一个,而不是您自己选择。

dependencies和devDependencies是最常见的。当你使用ts时,你就要分清:ts到底安装在那个依赖?由于ts是开发用的工具,在js运行时不存在。所以ts应该属于devDependencies依赖

当然你也可以安装系统范围的ts,但是这样做有几个缺点:

  1. 不能保证你的合作者拥有相同的ts版本
  2. 为项目设置添加了一个额外的步骤。

所以我们应该将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"
  }
}