`this-property-fallback` 비권장 사용 해결 방법

배경

Handlebars 템플릿에서 컨트롤러/컴포넌트의 프로퍼티를 참조하기 위해 {{foo}}와 같은 구문을 사용하는 경우, {{this.foo}}로 업데이트해야 합니다.

상위 정보: Property Fallback Lookup | Ember.js - Deprecations

Discourse를 Ember 4.x로 업그레이드하는 과정에서, 테마와 플러그인이 이 변경 사항을 서두르지 않아도 되도록 하위 호환성 시머(shim)를 도입했습니다. 그러나 이 시머를 무기한 유지하는 것은 현실적으로 불가능하므로, 테마와 플러그인을 최신 구문으로 업데이트해야 합니다.

비권장(Deprecation)

최신 버전의 Discourse에서 레거시 구문을 사용하면 콘솔에 비권장 메시지가 출력됩니다. 다음과 같은 형태입니다:

DEPRECATION: [PLUGIN discourse-calendar] The `loading` property path was used in the `discourse/plugins/discourse-calendar/discourse/templates/admin-plugins-calendar.hbs` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{this.loading}}

다른 모든 비권장 사항과 마찬가지로, 이 경고의 가시성을 점차 높일 것이며, 궁극적으로 하위 호환성 시머를 제거할 것입니다. 최종 제거 시점은 2025년 2분기를 목표로 하고 있지만, 실제 데이터에 따라 조정될 수 있습니다.

코드 업그레이드

작은 테마/플러그인의 경우, 템플릿을 수동으로 업데이트하여 프로퍼티 이름 앞에 this.를 추가할 수 있습니다.

더 큰 테마/플러그인의 전환을 용이하게 하기 위해, 자동 수정기를 포함하는 새로운 ember-template-lint 규칙을 도입했습니다.

따라서 표준 린팅 구성의 최신 버전을 사용 중인 경우(플러그인 스켈레톤 및 테마 스켈레톤 참조), ember-template-lint --fix를 다음에 실행할 때 영향받는 모든 코드가 자동으로 업데이트됩니다.

질문이나 우려 사항이 있다면 아래로 알려주시기 바랍니다!

정말 멋지네요! 제 플러그인 중 하나(린팅 설정을 제대로 업데이트했다고 생각합니다)에서 최근까지 없었을 것이라고 확신하는 {{this.blah}} 인스턴스가 아주 많이 보입니다. 얼마나 멋진지 아무리 강조해도 부족합니다. :tada: :clinking_glasses: :beers:

스켈레톤에 업데이트가 있을 때 각 플러그인에서 적절한 파일을 복사/삭제하는 자동화된 방법이 있다면 좋겠습니다. (이번에는 제가 수동으로 그렇게 했을지도 모릅니다.) 스켈레톤에 작은 bash 스크립트를 넣어서 현재 디렉토리에 plugin.rb 파일이 있는지 확인하고, 만약 있다면 스크립트가 있는 위치에서 현재 디렉토리로 내용을 복사하도록 하는 것이 가능할 것입니다. 그런 식으로요.

공식적으로 홍보하진 않았지만, GitHub - discourse/mass-pr: A tool for applying automated changes across a large number of GitHub repositories · GitHub 에 관심이 있으실 수 있습니다. 우리는 이 도구를 사용해 유지 관리하는 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 · GitHub

다만, 더 가벼운 업데이트 스크립트에 대해서는 pr-welcome 입니다! 저장소가 하나뿐인 경우 이 스크립트들은 다소 과하게 느껴질 수 있습니다.

말도 안 돼. 정말 대단하네요!

써보고 싶다는 기대감에 설레지만, 감사 인사를 드리고 싶다는 마음도 참을 수 없었습니다.

아니요. 스크립트 1개는 2개보다 유지보수가 4배나 쉬우며, 여러분이 그 스크립트를 사용 중이라면 제가 사용하고자 하는 것도 바로 그 스크립트입니다.

정말 멋지네요.

고맙습니다, 데이비드! 정말 훌륭합니다.

먼저, 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로 제출해야 하는지 깨닫게 해 주었습니다. 정말로 감사합니다.