我有一个NodeJS应用程序,我用TypeScript编写。它使用许多Node包。并非所有这些包都具有Typescript定义,因此我使用Typings来获取单独的定义文件。
当我将我的应用程序部署到生产服务器时,我有一个运行npm install
,typings install
和tsc
的Git钩子,因为它们不包含在Git存储库中。 / p>
当在DefinitelyTyped上发布新版本的Typings定义文件时,我会在运行typings install
时收到警告,我的定义文件已被弃用(更新,替换或删除):
typings WARN deprecated 6/30/2016: "registry:dt/bluebird#2.0.0+20160319051630" is deprecated (updated, replaced or removed) typings WARN deprecated 7/5/2016: "registry:dt/knex#0.0.0+20160622193910" is deprecated (updated, replaced or removed) typings WARN deprecated 7/20/2016: "registry:dt/node#6.0.0+20160613154055" is deprecated (updated, replaced or removed) typings WARN deprecated 7/19/2016: "registry:dt/lodash#3.10.0+20160619033623" is deprecated (updated, replaced or removed)
可以做些什么呢?有没有一种简单的方法来更新它们?看起来typings.json文件指定#符号后面的包的版本号和+号后面的日期。如果新的定义文件上传到DefinitelyTyped,那么通常认为它比以前的版本更准确或更完整吗?
除了每个包裹的typings uninstall --save
后跟typings install --save
之外,是否还有任何经过批准的方式来手动更新这些内容?看起来很麻烦,应该有一些简单的方法,比如typings update [package-name]
。
答案 0 :(得分:27)
还应该提到TypeScript 2.0 officially released in September 2016有一个更简单的解决方案集成到npm
中(与Typings作者和TSD作者合作)。你基本上得到绝对类型的包@types/packageName
:
npm install --save packageName @types/packageName
同时还能够直接从npm包中自动获取类型。因此,您只需使用package.json
和npm
来直接管理您的类型定义。在这种情况下
npm update
将完全符合您最初请求的行为。
查看beta announcement blog post和official Typescript documentation了解详情。
然而,请注意,在TypeScript's Beta announcement的评论部分中提到的Typescript团队成员(Ryan Cavanaugh)至少他所指的Beta的当前版本并未提出警告。 - 日期类型定义。即使对于semver主要更新。意思是如果你想要lodash版本4的类型定义而不是lodash版本3,那么就没有警告。从而获得经历了重大变化的库的类型定义。可能有些想法(编辑:个人尚未确认最终2.0版本是否属于这种情况。)。
没有更新命令,关于它有一个issue on Typings,包含unix和powershell脚本以自动执行某种更新。
正如您在CLI选项中所看到的,您可以更新具有特定源和semver范围的特定包的类型定义。
如果源是绝对类型,则会在包前面加dt~
。如果您拥有semver版本^3.10.0
,则会使用@^3.10.0
进一步为包名称添加后缀。
根据它是否是常规或开发依赖项,您还可以分别添加--save
或--save-dev
。如果它是一个全局性的依赖项,你还需要添加--global
。这应该在typings.json
文件
要使用semver版本^3.10.0
将上面提到的lodash软件包更新为最新的类型定义,您可以写下:
typings install dt~lodash@^3.10.0 --save
或
typings install dt~lodash@^3.10.0 --save --global
如果它是全球依赖。
这将更新typings.json的哈希值和日期,并为给定的semver范围安装最新的定义。如果没有找到更新,则文件没有变化。如果您设置为自动执行此更新过程,则可以编写一个脚本,尝试执行这些更新,无论如何。
请注意,绝对键入的类型定义不一定总是使用版本正确标记。可能完全没有标记版本或它们之间有很大差距。例如,也可能是未标记的版本比最新的标记版本更新,这是目前在绝对类型(2016年6月25日)的lodash的情况。
您可以使用以下命令轻松发现给定来源的给定包存在哪些标记版本:
typings view <source>~<package> --versions
对于包含绝对类型作为源的包lodash,它将是:
typings view dt~lodash --versions
要查看可能更新的未标记版本,我认为您必须实际检查绝对类型仓库中的相应目录,可以在最新提交中提到或在文件顶部说明。