为何NPM推荐将@types包作为--save依赖而非--save-dev?
为什么NPM推荐把@types包放到--save依赖里?
核心原因是开发场景的差异:
- 如果你是开发供其他开发者使用的npm库,@types必须放在
dependencies(也就是--save对应的依赖)里。因为使用你这个库的TypeScript开发者,需要这些类型定义来获得代码提示、通过TS编译检查,总不能让用户手动额外安装对应的@types包吧?比如你写了一个基于express的工具库,用户安装你的库后,@types/express得同步被安装,不然他们的TS项目会直接报类型缺失的错误。 - 但如果你是开发自己部署的应用(比如前端项目、Node.js服务),@types确实应该放在
devDependencies(--save-dev对应的依赖)里。因为最终上线部署的是编译后的JS代码,TS类型定义只是开发阶段用来辅助编码、做语法检查的,部署阶段完全不需要,放到devDependencies还能减少生产环境的依赖体积。
NPM文档里的建议,更多是针对库开发者的场景,毕竟官方文档会优先考虑包发布的通用情况。而大部分日常开发应用的开发者,习惯把@types放devDependencies是完全合理的,不用纠结。
内容的提问来源于stack exchange,提问作者Devin Johw
相关产品推荐
相关产品推荐

