Discourse 플러그인에 Ember 애드온(예: ember power select)을 추가할 수 있을까요?

플러그인에 몇 가지 에임버(Ember) 애드온을 추가하고 싶습니다.

예를 들어, 에임버의 Power Select가 있습니다.

(이것은 드롭다운을 처리하는 데 도움이 됩니다. Discourse는 select-kit을 사용하는데, 이것이 또한 강력하다는 것은 알고 있지만, 코드베이스에서 추상화되어 있어 커스터마이징하기가 어렵습니다. 그래서 power select를 시도해 보고 싶습니다).

일반적인 Rails/Ember 앱에서는 다음과 같이 애드온을 추가할 것이라고 생각합니다:

$ ember install ember-power-select

그런 다음 다음과 같은 내용을 추가합니다:

hbs 템플릿:

<PowerSelect @options={{this.names}} @onChange={{this.foo}} as |name|>
  {{name}}
</PowerSelect>

그것과 함께 사용되는 자바스크립트 파일:

    import Controller from '@ember/controller';
    export default class extends Controller {
      names = ['Stefan', 'Miguel', 'Tomster', 'Pluto']
      foo() { }
    }

하지만 Discourse 플러그인은 표준 Rails 앱이 아닙니다. 작동하려면 특별히 해야 할 일이 있습니까?

글쎄, 힌트를 얻을 수 있을지 궁금해서 지켜봤는데, 결국 4일 뒤에 여기까지 왔네요.

저는 Ember 초보자에 가깝지만, “심하게 추상화된” 부분을 다루는 방법을 익히고 그 규칙에 따르는 것이 훨씬 낫다고 확신합니다. 다른 애드온을 가져오는 것뿐만 아니라, 유지보수도 어려울 테니까요.

우리는 Discourse를 EmberCLI로 업그레이드하고 있으며, 이제 거의 완료 단계에 도달했습니다:

모두 감사합니다.

이전에 그 내용을 본 적은 있지만, 업그레이드가 완료될 때까지 Ember 애드온을 추가할 수 없다는 확인을 받아서 다행입니다. 그렇다면 업그레이드가 완료되는 대로 곧 Ember 애드온을 추가할 수 있다는 뜻이네요. 정말 좋은 소식입니다.


흥미로운 질문이라고 생각합니다. 제 생각을 말씀드리겠습니다:

Discourse의 "추상화된 부분"을 사용하는 것과 Ember 애드온을 사용하는 것의 차이점입니다: 제 생각이 틀릴 수도 있지만, 플러그인에서 특정 작업을 수행할 때, Discourse가 이미 하고 있는 것과 다른 것을 시도하는 경우라면 Ember 애드온을 사용하는 것이 유지보수가 더 쉽다고 생각합니다. 제 논리는 다음과 같습니다:


여기서 예시로 든 것은 플러그인에 완전히 새로운 드롭다운을 추가하고 싶은 경우입니다. 이 구분이 아마도 중요할 것입니다–제가 말하는 것은 플러그인에서 Discourse 코드베이스에서 수행되지 않는 새로운 것을 시도하는 것이며, 질문은 Discourse 메서드로 시작할지 아니면 별도의 애드온을 사용할지 여부입니다.

많은 경우 선택의 여지가 정말 없습니다. 예를 들어, 주제(topics)에 사용자 지정 필드를 추가하고 싶다면 항상 Discourse의 사전 구축된 메서드와 코드를 기반으로 커스터마이징할 것입니다.

하지만 특정 기능에 초점을 맞춘 경우–예를 들어 새로운 목적을 위한 드롭다운처럼–이미 Discourse 메서드를 사용한다면, 해당 메서드가 원래 의도된 용도가 아닌 것에 맞게 수정해야 하는 상황에 놓이게 됩니다.

옵션 1: 예를 들어 category-chooser에서 볼 수 있는 select-kit 코드를 가져와 새로운 위치(카테고리와 관련 없는 곳)에 삽입한 후, 카테고리 대신 제가 원하는 드롭다운의 주제가 되도록 커스터마이징을 시도할 수 있습니다. 이것이 제가 이전에 까다로운 작업이라고 설명한 것입니다.

그리고 유지보수가 어려울 수 있습니다–Discourse 팀이 category-chooser의 select-kit 코드 작동 방식을 변경하면, 제 새로운 커스터마이징된 드롭다운도 변경될 수 있지만, 예상치 못한 방식으로 변경될 수 있기 때문입니다(실제 카테고리 선택 드롭다운과 약간 다르게 작동하도록 커스터마이징했기 때문이죠).

옵션 2: Ember에서 강력하면서도 커스터마이징을 위해 만들어진 것을 삽입할 수 있습니다. 이 경우 코드가 실제로 어떻게 작동하는지 비교적 명확하게 볼 수 있습니다. 그러면 Discourse가 드롭다운에 추가할 수 있는 멋진 새로운 기능들을 놓칠 수도 있지만, 제 드롭다운이 어떻게 작동하는지 더 쉽게 파악할 수 있을 것입니다. 따라서 가능하다고 생각하면 이것이 아마도 최선의 옵션일 것입니다.

옵션 3: 처음부터 완전히 코딩합니다. 제가 종종 도달하는 지점입니다. 코딩이 완료되면, 제가 완전히 이해하고 커스터마이징할 수 있는 코드를 갖게 되는 것은 좋습니다. 하지만 물론 더 오래 걸리며, (최소 초기 버전은) Discourse 팀이나 Ember 팀이 구축한 것만큼 강력하고 견고할 가능성이 낮습니다.

리마인드입니다. 그리고 Theme Components에 Ember 애드온 지원이 추가되면 정말 좋겠습니다 …

Bump.
Discourse에 애드온을 추가할 때, 예를 들어 다음과 같이
cd app/assets/javascripts/ && yarn add LIB_NAME
명령을 실행하면, 이 애드온은 플러그인에서 어떻게 사용 가능한가요?

요즘 이게 가능한지 궁금합니다. (가능하다면, 어떻게 가능한가요?)

그렇지는 않습니다. Ember 애드온은 Discourse 코어에 추가할 수 있지만, 플러그인을 통해는 추가할 수 없습니다. 향후 플러그인/테마가 npm 의존성을 지정할 수 있는 방법을 추가할 수도 있지만, 당장의 로드맵에는 포함되어 있지 않습니다.

정말 이걸 구글링하고 있었는데.

– @david에게 여쭤볼 게 하나 있습니다. 플러그인으로 사용할 수 없는 경우, 자체 호스팅 환경에서 코어에 플러그인을 추가한 뒤 다른 플러그인에서 이를 사용할 수 있을까요? 가능하다면 어떻게 해야 하나요? app/assets/javascripts/discourse의 package.json에 추가해 보았지만, 아마도 제가 뭔가 간단한 걸 놓치고 있어서 로딩이 안 되는 것 같습니다.

가능은 하지만, Discourse를 포크한 뒤 모든 커밋을 가져오려고 하는 것은 정말로 추천하지 않습니다. 그렇게 해본 사람들은 모두 후회하고 있습니다.

음. 하지만 파일이 하나뿐이라면, app.yml을 사용해 Discourse를 클론한 직후 해당 파일을 어딘가에서 /var/www/discourse로 복사하도록 설정할 수 있을 것입니다. 사이트 설정의 한도를 변경하기 위해 이전에 그렇게 해본 적이 있습니다.

네, @pfaffman님이 말씀하신 것처럼 app.yml을 수정해서 어떻게든 동작하게 만들 수는 있습니다. 다만 수정이 yarn install과 assets:precompile 단계 전에 이루어져야 합니다.

하지만 이는 완전히 지원되지 않는 방법이며, 예상치 못한 문제를 일으킬 수 있습니다. 추천하지 않습니다.

참고로 어떤 애드온을 사용하려 하셨나요?

사실 그 정도까지 진행되지는 않았지만, 대부분의 인기 있는 애드온은 Discourse 자체에 이미 존재하는 기능을 가지고 있다는 것을 발견했습니다. 애드온의 매력은 일반적으로 문서화가 조금 더 잘 되어 있고, 막힐 때 활용할 수 있는 리소스가 꽤 잘 갖춰져 있다는 점입니다. 예를 들어, ember-concurrency에는 방대한 문서와 “해결된” 이슈들이 많아, 새로운 개발자라면 해당 애드온에 접근할 수 있다면 조금 더 쉽게 개발을 시작할 수 있을 것입니다.

하지만 말씀드린 대로, 그것은 더 많은 욕구보다는 단순한 궁금증에 가까웠습니다.

그럼 당신은 사실상 문제를 찾고 있는 셈입니다. 기존 리소스가 당신의 요구를 충족하지 못한다는 것을 발견하기 전까지는 어떤 애드온도 고려하지 않는 것을 추천합니다.

하지만 그것이 Discourse가 현재 또는 미래에 그 문제를 해결하는 방식과 호환될지 당신은 알 수 없습니다. Discourse를 위해 개발을 하려면, Discourse 내에서 것들이 어떻게 작동하는지에 대한 예시를 살펴보는 것이 올바른 방향입니다.

자동차 밑에 떨어뜨렸는데도 더 잘 보이는 가로등 밑에서 열쇠를 찾는 사람이 되지 마세요.