За последние несколько лет мы постепенно отказываемся от устаревшего синтаксиса Ember .extend({ ... }) в пользу синтаксиса нативных классов, такого как class extends Foo {...}.
Хотя устаревший синтаксис технически всё ещё поддерживается, современные инструменты для работы с JS, включая IDE и Prettier 3.0, не поддерживают декораторы в устаревших синтаксисах на основе объектных литералов. В последней версии нашей рекомендуемой конфигурации линтера вы увидите следующие ошибки при использовании устаревшего синтаксиса:
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
Этот скрипт пройдёт по всем вашим файлам и преобразует их в новый синтаксис нативных классов. Иногда он может потребовать вашего ручного вмешательства. Всегда проверяйте внесённые изменения — скрипт не идеален.
Если у вас много тем или плагинов для обновления, вам может быть интересен наш скрипт массовых PR.
Вызовы modifyClass
Если вы используете декораторы внутри вызовов modifyClass, то вам необходимо перейти на новый синтаксис, основанный на нативных классах. Дополнительную информацию об этом можно найти в документации. При внесении этих изменений, пожалуйста, учитывайте задокументированные ограничения.