テーマとプラグインを自動的に.gjsファイル形式に更新

Discourse の標準的な lint 設定の最新バージョンでは、require-strict-mode ember-template-lint ルールを有効にしました。これにより、すべての .hbs ファイルに対して lint エラーが発生します。

警告を解決するには、コンポーネント、ルート、およびコネクタのすべてのテンプレートを .gjs ファイルに変換する必要があります。これを容易にするために、Ember の @embroider/template-tag-codemod を基盤とした discourse-gjs-codemod を作成しました。

codemod を使用するには、まず、プラグイン スケルトン または テーマ スケルトン から最新の package.json をコピーして、lint 依存関係が最新であることを確認します。次に、eslint と prettier を実行します。

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

自動修正できなかった問題があれば、今すぐ手動で解決してください。まだ ember-template-lint は実行しないでください。これは失敗することが予想されます。

次に、このコマンドを使用して codemod を実行します。

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

自動的に解決できない問題がある場合は、情報がターミナルに出力されます。問題を解決したら、codemod を再度実行してください。

.gjs ファイル形式の詳細については、公式ガイドを参照してください。

「いいね!」 9

パスワードを要求されますか?

 *) pfaffman@noreno:~/src/pfaffman/discourse-pfaffmanager$ pnpm dlx https://github.com/discourse/discourse-gjs-codemod
Username for 'https://github.com': pfaffman
Password for 'https://pfaffman@github.com':
/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d72469d-323788:
 ERROR  Command failed with exit code 128: git ls-remote git+ssh://git@github.com/discourse/discourse-gjs-codemod.git HEAD
ERROR: Repository not found.
fatal: Could not read from remote repository.

https://github.com/discourse/discourse-gjs-codemods は機能しません。まだプライベートリポジトリなのでしょうか?

「いいね!」 4

:facepalm:

おっしゃる通り、プライベートでした。解除しました:

「いいね!」 5

それは大きな違いを生みました!たくさんのことが起こりました。

私だけじゃないと知ってとても嬉しいです。:rofl:

もしこれらの3つのメッセージを削除したいなら、誰も気づきませんよ。:slight_smile:

新しいトピックに移動することはできますが、削除することはできません。。。

「いいね!」 5

これについてはどうですか?

                                                                                                                                                           [107/859]
 WARN  ピア依存関係に問題が見つかりました
.
├─┬ ember-auto-import 2.10.0
│ ├─┬ babel-loader 8.4.1
│ │ └── ✕ missing peer webpack@">=2
│ ├─┬ css-loader 5.2.7
│ │ └── ✕ missing peer webpack@"^4.27.0 || ^5.0.0"
│ ├─┬ style-loader 2.0.0
│ │ └── ✕ missing peer webpack@"^4.0.0 || ^5.0.0"
│ └─┬ mini-css-extract-plugin 2.9.2
│   └── ✕ missing peer webpack@^5.0.0
└─┬ ember-source 5.12.0
  ├── ✕ missing peer @glimmer/component@^1.1.2
  └─┬ ember-auto-import 2.10.0
    └── ✕ missing peer webpack@^5.0.0
インストールする必要があるピア依存関係:
  @glimmer/component@^1.1.2   webpack@">=5.0.0 <6.0.0-0"


Done in 1.6s using 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: Command failed with exit code 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'

しかし、いくつかのテンプレートを除いてすべて変換されたようです。まだ理由は理解していませんが、驚きません。それらには奇妙なものがいくつか含まれており、とにかく書き直している途中でした。

「いいね!」 1

peerdependency のメッセージは、おそらく単なる警告であり、codemod の目的では無視できると思います。

もう一方のエラーについてはよくわかりません。ログの上の方にもっと役立つ情報はありませんか?これは公開されているテーマ/プラグインで、共有できますか?

ええ。エラーはすべて誤っていると思います。変換されなかったのはほんの少しだけです。理由はわかりませんが、申し上げたように、どうせ書き直すつもりでした。

書き換えられたのは12個以上だと思いますが、まさに奇跡です!

近いうちに、公開されている他のものにも試してみます。

ありがとうございます!

「いいね!」 1