如何手动更新已弃用的类型包
Posted
技术标签:
【中文标题】如何手动更新已弃用的类型包【英文标题】:How to manually update a deprecated typings package 【发布时间】:2016-11-26 18:56:29 【问题描述】:我有一个使用 TypeScript 编写的 NodeJS 应用程序。它使用了许多 Node 包。并非所有这些包都有 Typescript 定义,所以我使用 Typings 来获取单独的定义文件。
当我将应用程序部署到生产服务器时,我有一个运行 npm install
、typings install
和 tsc
的 Git 挂钩,因为这些不包含在 Git 存储库中。
当一个新版本的 Typings 定义文件在 DefinitiveTyped 上发布时,我在运行 typings install
时收到警告我的定义文件已被弃用(更新、替换或删除):
对此可以做些什么?有没有一种简单的方法来更新它们?看起来 typings.json 文件在 # 号之后指定了包的版本号,在 + 号之后指定了日期。如果一个新的定义文件被上传到了definitelyTyped,假设它比以前的版本更准确或更完整,通常不是安全的吗?
除了typings uninstall --save
后跟typings install --save
对每个软件包进行手动更新之外,是否还有任何认可的方式来手动更新这些?看起来很麻烦,应该有一些简单的方法,比如typings update [package-name]
。
【问题讨论】:
【参考方案1】:TypeScript 2.0 简单
还应该提到 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 了解更多信息。
@types 的重大更改不会触发警告
但是想指出,Typescript 团队的一名成员 (Ryan Cavanaugh) 在 TypeScript's Beta announcement 的评论部分提到,至少他所指的 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
文件中可读
要将您上面提到的 lodash 包更新为具有 semver 版本 ^3.10.0
的最新类型定义,您可以编写:
typings install dt~lodash@^3.10.0 --save
或
typings install dt~lodash@^3.10.0 --save --global
如果它是一个全局依赖项。
这将更新 typings.json 的哈希和日期,并为给定的 semver 范围安装最新定义。如果找不到更新,则文件没有更改。如果您打算自动执行此更新过程,您可以编写一个脚本来尝试执行这些更新。
注意事项
请注意,确定类型的类型定义不一定总是正确标记版本。可能完全缺乏标记版本或它们之间存在很大差距。例如,也可能是未标记的版本比最新的标记版本更新,Lodash 目前就是这种情况,绝对类型(2016 年 6 月 25 日)。
您可以通过以下方式轻松发现给定源的给定包存在哪些标记版本:
typings view <source>~<package> --versions
对于以“确定类型”为源的包 lodash,它将是:
typings view dt~lodash --versions
要查看可能更新的未标记版本,我认为您必须实际检查绝对类型存储库中的相应目录,它可能在在最新的提交中提到或在文件顶部说明。
【讨论】:
感谢您的详细回复! 发行说明链接未提供有关此信息。这里有更多信息。 blogs.msdn.microsoft.com/typescript/2016/06/15/… 如果有人使用@Types/packageName
方法也使用sinopia,请注意命名空间包不起作用,您必须通过添加以下行默认您在.npmrc
中为该命名空间默认您的注册表: @types:registry=https://registry.npmjs.org/
@MEMark 好点。不明白为什么他们没有将其包含在发行说明中,但我写的大部分内容都是从您的链接中获得的,因此添加了该链接和官方文档的链接。虽然官方文档可以更好地解释所有细节。以上是关于如何手动更新已弃用的类型包的主要内容,如果未能解决你的问题,请参考以下文章
如何正确更新已弃用的 Android BillingFlowParams 方法
如何从已弃用的 Supervisor.spec 更新为新的 Supervisor.behaviour?