`this-property-fallback` の非推奨の解決

背景

基本的に、{{foo}} のようなものを handlebars テンプレートでコントローラー/コンポーネントのプロパティを参照するために使用している場合、{{this.foo}} に更新する必要があります。

アップストリーム情報: Property Fallback Lookup | Ember.js - Deprecations

Discourse を Ember 4.x アップグレードで動作させるために、テーマやプラグインがこの変更を急いで行う必要がないように、後方互換性シムを導入しました。しかし、このシムを無期限に維持することは現実的ではないため、テーマやプラグインを最新の構文に更新する必要があります。

非推奨

Discourse の最新バージョンでは、レガシー構文を使用すると、コンソールに非推奨メッセージが表示されます。次のようになります。

DEPRECATION: [PLUGIN discourse-calendar] `loading` プロパティパスが `discourse/plugins/discourse-calendar/discourse/templates/admin-plugins-calendar.hbs` テンプレートで `this` を使用せずに使用されました。このフォールバック動作は非推奨となり、テンプレートで使用されるすべてのプロパティは `this` で検索する必要があります: {{this.loading}}

他の非推奨と同様に、この警告の可視性を徐々に高め、最終的に後方互換性シムを削除します。最終的な削除は 2025 年第 2 四半期を暫定目標としていますが、実際のデータに基づいて調整します。

コードのアップグレード

小規模なテーマ/プラグインの場合は、テンプレートを手動で更新して、プロパティ名の前に this. を追加できます。

大規模なテーマ/プラグインの移行を容易にするために、自動修正機能を含む新しい ember-template-lint ルールを導入しました。

したがって、最新バージョンの標準的な linting 設定 ( プラグイン スケルトン および テーマ スケルトン のとおり) を使用している場合、影響を受けるすべてのコードは、次回の ember-template-lint --fix 実行時に自動的に更新されます。

ご質問やご不明な点がございましたら、下記までお知らせください。

「いいね!」 6

素晴らしいですね!私のプラグインの1つで(正しくリンティング設定を更新したと思いますが)、最近まで存在しなかったはずの {{this.blah}} のインスタンスがたくさん表示されています。それがどれほど素晴らしいことか、言葉では言い尽くせません。 :tada: :clinking_glasses: :beers:

スケルトンに更新があった場合に、各プラグインで適切なファイルをコピー/削除する自動化された方法があれば便利です。(今回、自分で手作業でそれをやったかどうかは、言えませんが。)もしかしたら、スケルトンに小さな bash スクリプトを仕込んで、現在のディレクトリに plugin.rb があるかどうかを確認し、もしあれば、スクリプトがあった場所から現在のディレクトリにファイルをコピーできるようにする、といったことが可能かもしれません。そんな感じです。

「いいね!」 1

あまり宣伝していませんが、GitHub - discourse/mass-pr: A tool for applying automated changes across a large number of GitHub repositories に興味があるかもしれません。私たちは、これを維持している600以上のテーマ/プラグインリポジトリ全体にこのような変更を適用するために使用しています。

この場合、次のようなものを実行します。

GITHUB_TOKEN=... pnpm mass-pr \
  --message "DEV: Update linting" \
  --branch "update-linting" \
  --script scripts/update-js-linting.sh \
  discourse-solved \
  discourse-assign \
  ...

これにより、スケルトンの処理が更新され、すべてのリンティングが自動修正され、GitHubにPRが作成されます。

その後、マージを処理するための別のスクリプトがあります: GitHub - discourse/mass-merge: A script for mass-approving and merging Dependabot pull requests

ただし、軽量な更新スクリプトについては、ぜひ#pr-welcomeです!これらのスクリプトは、リポジトリを1つだけ更新する場合は少し大げさです。

「いいね!」 5

まさか。すごいですね!

試すのが待ちきれませんが、感謝を伝えるのも待ちきれませんでした。

いいえ。スクリプトが1つの方が、2つよりも保守が4倍容易であり、皆さんがそれを使用しているなら、それを使いたいと思います。

素晴らしいです。

Davidさん、ありがとうございます!素晴らしいです。

まず、pnpm installが必要だと気づくのに少し時間がかかりました。

そして今、これがあります:

#!/usr/bin/env bash
# sync-with-skeleton -- assumes that you're in a 
today=$(date +"%Y-%m-%d")
repo=$(grep url .git/config | sed -E 's/.*:([^/]+/[^.]+).*/\1/')
cd ~/src/discourse-repos/mass-pr
GITHUB_TOKEN=$GITHUB_TOKEN pnpm mass-pr \
--message "DEV: Update GitHub workflows" \
--branch "sync-with-skeleton-$today" \
--script scripts/update-workflows.sh \
$repo

例えば、現在のディレクトリでplugin.rbをチェックしたり、リポジトリが存在するかどうかをチェックしたりする方が良いでしょうが、今日は時間がなかったのでここまでです。あるいは、PRとして提出して、それがライブしていたディレクトリにcdするようにすることもできます。

そして、たとえ自分だけの場合でも、なぜPRとして提出すべきなのかも学びました。本当にありがとうございます。

「いいね!」 2