Автоматическое обновление тем и плагинов в формат файлов .gjs

В последней версии стандартной конфигурации линтинга Discourse мы включили правило require-strict-mode для ember-template-lint. Это приведёт к возникновению ошибки линтинга для любых файлов с расширением .hbs.

Чтобы устранить предупреждения, необходимо преобразовать все шаблоны компонентов, маршрутов и коннекторов в файлы с расширением .gjs. Чтобы упростить этот процесс, мы создали утилиту discourse-gjs-codemod, которая базируется на @embroider/template-tag-codemod от Ember.

Для использования кодомода сначала убедитесь, что зависимости линтинга обновлены, скопировав актуальный файл package.json из шаблона плагина или шаблона темы. Затем запустите eslint и prettier:

pnpm i
pnpm eslint --fix .
pnpm prettier --write "**/*.{gjs,js,hbs,scss}"

Если какие-либо проблемы не были исправлены автоматически, устраните их вручную. Пока не запускайте ember-template-lint — это ожидаемо приведёт к ошибке.

Теперь запустите кодомод с помощью следующей команды:

pnpm dlx https://github.com/discourse/discourse-gjs-codemod

Если возникнут проблемы, которые не могут быть решены автоматически, информация о них будет выведена в терминал. После устранения проблемы запустите кодомод снова.

Для получения дополнительной информации о формате файлов .gjs ознакомьтесь с официальным руководством:

Оно запрашивает пароль?

 *) pfaffman@noreno:~/src/pfaffman/discourse-pfaffmanager$ pnpm dlx https://github.com/discourse/discourse-gjs-codemod
Имя пользователя для 'https://github.com': pfaffman
Пароль для 'https://pfaffman@github.com':
/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d72469d-323788:
ОШИБКА: Команда завершилась с кодом выхода 128: git ls-remote git+ssh://git@github.com/discourse/discourse-gjs-codemod.git HEAD
ОШИБКА: Репозиторий не найден.
fatal: Не удалось прочитать данные из удалённого репозитория.

https://github.com/discourse/discourse-gjs-codemods не работает. Возможно, он всё ещё приватный?

:facepalm:

Ты прав, это было приватно. Теперь доступ открыт:

Это имело очень большое значение! Произошло множество событий.

Очень рад, что я не единственный, с кем такое случается. :rofl:

Если вы хотите удалить эти три сообщения, никто не узнает. :slight_smile:

Я могу переместить их в новую тему, но не могу удалить их. . .

А что насчёт этого?

                                                                                                                                                           [107/859]
 WARN  Обнаружены проблемы с зависимостями одноранговых узлов
.
├─┬ ember-auto-import 2.10.0
│ ├─┬ babel-loader 8.4.1
│ │ └── ✕ отсутствует одноранговый узел webpack@>=2
│ ├─┬ css-loader 5.2.7
│ │ └── ✕ отсутствует одноранговый узел webpack@"^4.27.0 || ^5.0.0"
│ ├─┬ style-loader 2.0.0
│ │ └── ✕ отсутствует одноранговый узел webpack@"^4.0.0 || ^5.0.0"
│ └─┬ mini-css-extract-plugin 2.9.2
│   └── ✕ отсутствует одноранговый узел webpack@^5.0.0
└─┬ ember-source 5.12.0
  ├── ✕ отсутствует одноранговый узел @glimmer/component@^1.1.2
  └─┬ ember-auto-import 2.10.0
    └── ✕ отсутствует одноранговый узел webpack@^5.0.0
Необходимо установить следующие одноранговые зависимости:
  @glimmer/component@^1.1.2   webpack@">=5.0.0 <6.0.0-0"


Готово за 1,6 с с использованием pnpm v9.15.9
file:///home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/execa@9.6.0/node_modules/execa/lib/return/final-error.js:6
        return new ErrorClass(message, options);
               ^

ExecaError: Команда завершилась с кодом ошибки 255: '/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/@embroider+template-
tag-codemod@1.2.1-unstable.ce3535d_@glimmer+component@2.0.0_handlebars@4._arnanpbg4hbtumvl4wyacggoiu/node_modules/@embroider/template-tag-codemod/dist/src/cli.js' '
--relativeLocalPaths=false' '--nativeRouteTemplates=false' '--nativeLexicalThis=false' '--templateInsertion=end' --addNameToTemplateOnly '--customResolver=/home/pfa
ffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/discourse-gjs-codemod@https+++codeload.github.com+discourse+discourse-gjs-cod
emod+tar.gz+a4bc_2dxbzd2itovnk6l7sa4geot32y/node_modules/discourse-gjs-codemod/custom-resolver.js' '--renamingRules=/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvg
h3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/discourse-gjs-codemod@https+++codeload.github.com+discourse+discourse-gjs-codemod+tar.gz+a4bc_2dxbzd2itovnk6l7sa4geo
t32y/node_modules/discourse-gjs-codemod/rules.js' '--renderTests=test/**/*.js' '--routeTemplates=**/templates/**/*.hbs' '--components=**/components/**/*.hbs'

Но, похоже, были преобразованы все шаблоны, кроме нескольких. И хотя я пока не понимаю, почему это произошло, я не удивлён: в них есть какие-то странные вещи, и я как раз занимался их переписыванием.

Я думаю, что сообщение о пир-зависимости, скорее всего, просто предупреждение, которое можно проигнорировать в контексте кодомода.

Не уверен насчёт другой ошибки. Есть ли что-то более полезное выше в логе? Это публичная тема или плагин, которым вы могли бы поделиться?

Да. Я думаю, что все ошибки ложные. Небольшое количество элементов не было преобразовано. Не уверен, почему, но, как я уже говорил, я всё равно планировал их переписать.

Кажется, что удалось переписать дюжину или даже больше, так что это просто чудо!

Скоро я попробую это на других публичных материалах.

Спасибо!

Небольшой вопрос по обновлению форматов .gps. Нужно ли это делать в репозитории discourse/discourse или напрямую на вашем экземпляре Discourse?

Я использую самохостинг Discourse через Docker. Попробовал выполнить команду, но она не сработала:

pnpm i
pnpm eslint --fix .
pnpm prettier --write “**/*.{gjs,js,hbs,scss}”

Это должно быть выполнено в локальной среде разработки Discourse.

В зависимости от того, как давно вы создали плагин из шаблона, вам также может потребоваться получить eslint.config.mjs.