`@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本

Posted

技术标签:

【中文标题】`@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本【英文标题】:`@babel/runtime` and `@babel/plugin-transform-runtime` versions 【发布时间】:2019-01-05 16:12:03 【问题描述】:

@babel/runtime@babel/plugin-transform-runtime 是否应该在同一个版本上(例如,两个 7.2.0 完全相同)?或者我可以(作为库作者)将@babel/runtime 依赖项指定为^7.0.0,同时拥有最新的@babel/plugin-transform-runtime

我知道在 Babel 7 的 beta 版本期间,beta.56(请参阅https://***.com/a/51686837/2148762)发生了重大变化,但我猜当前的稳定版本应该不再是这种情况?

我问这个的原因是我理想地希望来自@babel/runtime 的助手在不同的包之间共享,并且对我来说保持版本范围开放似乎是个好主意。但与此同时,我不确定我应该降到多低(^7.0.0^7.2.0),以及@babel/runtime@babel/plugin-transform-runtime 之间是否存在关于版本号的隐含合同。

【问题讨论】:

【参考方案1】:

默认情况下,@babel/plugin-transform-runtime 只允许输出对 @babel/runtime 的引用,这些引用在 ^7.0.0 上工作,因为它不知道您要使用什么版本,并且做任何其他事情都会导致很多问题用户。这意味着您想做的事情是安全的。这样做的缺点是,如果我们继续添加新的助手,您的代码将无法利用它们的 @babel/runtime 版本(因为您可能仍在使用没有它们的 @babel/runtime 版本.

如果您想专门使用自 7.0.0 以来可能已添加到 Babel 的帮助器,用户可以在转换的参数中指定 version,例如


  "plugins": [
    ["@babel/plugin-transform-runtime",  version: "^7.2.0" ],
  ]

然后将要求您在 package.json 中包含 "@babel/runtime": "^7.2.0"

例如,由于直到 Babel 7.1.5 才支持更新的装饰器提案,如果您使用 transform-runtime 和非legacy 装饰器,装饰器助手仍将插入到您使用的每个文件中装饰器,而不是从 @babel/runtime 导入它。要获取共享助手,您需要在 transform-runtime 的选项中指定 version: "^7.1.5"

我能否(作为库作者)将 @babel/runtime 依赖项指定为 ^7.0.0,同时拥有最新的 @babel/plugin-transform-runtime?

是的,这是安全的。

我猜现在的稳定版本应该不再是这种情况了?

正确,这个问题是因为人们没有考虑到 beta 版本。

【讨论】:

以上是关于`@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本的主要内容,如果未能解决你的问题,请参考以下文章

babel JS 文件无法解析“@babel/runtime/helpers/builtin/classCallCheck”

VueJS - 找不到模块:错误:无法解析'@babel/runtime/regenerator'

添加@babel/transform-runtime 插件时无法读取未定义的属性“Reactstrap”

React-native,monorepo:无法解析模块@babel/runtime/helpers/interopRequireDefault

Haste模块映射中不存在模块`@babel / runtime / helpers / interopRequireDefault`

Error: Cannot find module '@babel/runtime/core-js/object/keys'(npm start报错)