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

Tra*_*ty3 26 npm typescript typescript-typings

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

当我部署应用到生产服务器,我有一个运行一个Git挂钩npm install,typings installtsc,因为这些都不是在Git仓库包括在内.

当在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].

Kos*_*lun 27

在TypeScript 2.0中很容易

还应该提到的是,2016年9月正式发布的 TypeScript 2.0 集成了一个更简单的解决方案npm(与Typings作者和TSD作者合作).你基本上得到绝对类型的包@types/packageName:

npm install --save packageName @types/packageName
Run Code Online (Sandbox Code Playgroud)

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

npm update
Run Code Online (Sandbox Code Playgroud)

将获得您最初请求的行为.

有关详细信息,请查看测试版公告博客文章官方Typescript文档.


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

然而将要注意到的注释部分,在打字稿团队成员(瑞安瓦诺)提到打字稿的Beta版发布,至少他指的是没有警告的出过期类型定义的测试版的当前版本.即使对于semver主要更新.意思是如果你想要lodash版本4的类型定义而不是lodash版本3,那么就没有警告.从而获得经历了重大变化的库的类型定义.可能有些想法(编辑:个人尚未确认最终的2.0版本是否属于这种情况.).

没有更新命令

没有更新命令,关于它的Typings存在问题,包含unix和powershell脚本以自动执行某种更新.

具体的安装命令

正如您在CLI选项中看到的那样,您可以更新具有特定源和semver范围的特定包的类型定义.

如果源是绝对类型的,那么你将在包的前面添加dt~.如果你有semver版本^3.10.0,你可以进一步使用包名称后缀@^3.10.0.

根据它是否是常规或开发依赖项,您还可以添加--save--save-dev分别添加.--global如果它是一个全球性的依赖,你还会进一步添加.这应该在typings.json文件中可读

要将上面提到的lodash包更新为带有semver版本的最新类型定义,^3.10.0您可以编写:

typings install dt~lodash@^3.10.0 --save
Run Code Online (Sandbox Code Playgroud)

要么

typings install dt~lodash@^3.10.0 --save --global
Run Code Online (Sandbox Code Playgroud)

如果它是一个全球依赖.

这将更新typings.json的哈希和日期,并为给定的semver范围安装最新的定义.如果没有找到更新,则文件没有变化.如果您设置自动执行此更新过程,则可以编写一个脚本,尝试执行这些更新,无论如何.

注意事项

请注意,绝对键入的类型定义不一定总是使用版本正确标记.可能完全没有标记版本或它们之间有很大差距.例如,也可能是未标记的版本比最新的标记版本更新,这是目前在绝对类型(2016年6月25日)的lodash的情况.

您可以使用以下命令轻松发现给定源中给定包的哪些标记版本:

typings view <source>~<package> --versions
Run Code Online (Sandbox Code Playgroud)

对于包含绝对类型作为源的包lodash,它将是:

typings view dt~lodash --versions
Run Code Online (Sandbox Code Playgroud)

要查看未标记的版本,这可能是更先进的日期,我认为你必须在绝对键入的回购,它实际检查相应的目录可以在最新一提提交,或在文件的顶部说明.