在主题和插件中迁移到JS原生类语法

在过去的几年里,我们一直在从 Ember 的旧版 .extend({ ... }) 语法转向原生类语法,例如 class extends Foo {...}

虽然旧版语法在技术上仍然受支持,但现代 JavaScript 工具(包括 IDE 和 Prettier 3.0)不支持基于旧版对象字面量的语法中的装饰器。在我们推荐的最新版 linting 配置中,使用旧版语法时会看到以下错误:

ESLint: error Native JS classes should be used instead of classic classes ember/no-classic-classes

Prettier: SyntaxError: Decorators cannot be used to decorate object literal properties

因此,如果您还没有这样做,现在是时候将您的主题和插件代码更新到新语法了。主要需要更新两处:新的类定义和 modifyClass 调用。

类定义

大部分工作可以使用 ember-native-class-codemod 来完成。在您的主题/插件存储库中运行:

NO_TELEMETRY=true npx ember-native-class-codemod@4.1.1 --no-classic-decorator **/*.js

这将遍历您的文件并将它们转换为新的原生类语法。有时它会提示您手动干预。请务必审查它所做的代码更改——它并非完美无缺。

如果您有许多主题/插件需要更新,您可能会对我们的 mass-pr 脚本感兴趣。

modifyClass 调用

如果您在 modifyClass 调用中使用装饰器,那么您需要使用新的基于原生类的语法。有关更多信息,请参阅文档。在进行这些更改时,请牢记记录的限制。

10 个赞