如何手动更新已弃用的打字包

时间:2016-07-22 19:10:22

标签: typescript npm typescript-typings

我有一个NodeJS应用程序,我用TypeScript编写。它使用许多Node包。并非所有这些包都具有Typescript定义,因此我使用Typings来获取单独的定义文件。

当我将我的应用程序部署到生产服务器时,我有一个运行npm installtypings installtsc的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]

1 个答案:

答案 0 :(得分:27)

在TypeScript 2.0中很容易

还应该提到TypeScript 2.0 officially released in September 2016有一个更简单的解决方案集成到npm中(与Typings作者和TSD作者合作)。你基本上得到绝对类型的包@types/packageName

npm install --save packageName @types/packageName

同时还能够直接从npm包中自动获取类型。因此,您只需使用package.jsonnpm来直接管理您的类型定义。在这种情况下

npm update

将完全符合您最初请求的行为。

查看beta announcement blog postofficial Typescript documentation了解详情。

从@types中断更改不会触发警告

然而,请注意,在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

要查看可能更新的未标记版本,我认为您必须实际检查绝对类型仓库中的相应目录,可以在最新提交中提到或在文件顶部说明。