Discourse 코어가 JS 패키지 관리용으로 pnpm으로 전환

Discourse 코어의 JS 패키지 매니저를 'yarn classic’에서 pnpm으로 전환합니다. 이를 통해 설치 속도 및 저장 공간 요구 사항이 크게 개선될 것입니다.

프로덕션

호스팅 관리 서비스나 표준 설치를 사용 중이라면 별도로 할 일이 없습니다. 다음 업데이트 시 변경 사항이 자동으로 적용됩니다.

커스텀 프로덕션 환경을 사용 중이라면 yarn ... 명령어를 pnpm ...으로 변경해야 합니다.

개발

Discourse 코어의 최신 버전을 가져온 후 서버를 시작할 때 다음과 같은 오류를 볼 수 있습니다:

pnpm is not installed

또는 yarn install과 같은 명령어를 실행하면 다음과 같은 오류가 표시됩니다.

error discourse@: The engine "yarn" is incompatible with this module. Expected version "please-use-pnpm". Got "..."

이 문제를 해결하려면 다음을 수행해야 합니다:

  1. npm install -g pnpm 실행

  2. pnpm install 실행

  3. 개발 환경에서 yarn ... 사용처를 모두 pnpm ...으로 교체

플러그인 / 테마

공식 플러그인/테마의 린팅 의존성에 pnpm을 사용하도록 전환했습니다.

discourse_theme CLI의 경우, gem update discourse_theme을 실행하여 로컬 버전을 업데이트해야 합니다.

yarn으로 되돌리기

yarn 기반의 Discourse 버전(예: stable 브랜치에서 개발 중)으로 되돌아가야 한다면, 코어의 모든 node_modules 디렉토리를 수동으로 삭제해야 합니다:

rm -rf node_modules app/assets/javascripts/*/node_modules

dev 환경에서 완벽하고 매끄러운 경험을 보고합니다. 첫 시도부터 바로 작동했습니다. 정말 감사합니다! :rocket:

자체 호스팅을 하고 계신 경우, 커스텀 컴포넌트와 플러그인을 사용하지 않으면 다른 조치를 취해야 하나요?

즉, 일부 플러그인과 컴포넌트는 공식적인 것이 아닙니다.

표준 설치를 사용하고 계시다면, 아무 조치도 필요하지 않습니다. 플러그인이나 테마에 변경 사항이 필요하지 않습니다.

기대하는 버전을 다음으로 변경해야 할까요:

please-use-pnpm-see-https://meta.discourse.org/t/324521

:smiley:

다른 FOSS 프로젝트에 기여하면서 최근 처음 PNPM을 접하게 되었습니다. 전환 과정은 정말 간단하고 매끄러웠으며, 효과적이고 즐거운 경험이었죠.

해당 프로젝트의 문서에 PNPM이 무엇인지, 그리고 어떻게 사용하는지에 대해 매우 간략한 노트를 작성했습니다. 프로젝트마다 세부 사항이 조금씩 다르겠지만, 저처럼 발표가 되기 전까지는 PNPM에 대해 전혀 알지 못했던 분들에게 빠른 소개가 될 수 있기를 바랍니다.

좋은 자료 감사합니다, @TonyG

다만 참고할 점은, 거기에 있는 "설정 메모"는 Discourse에 모두 필수적이지 않다는 것입니다. 왜 필요한지 모르겠네요… 윈도우 기반 애플리케이션이라서 그런 걸까요?

또한, "기존 프로젝트에서는 ‘node_modules’ 폴더를 삭제하기만 하면 됩니다"라는 그들의 안내는 Discourse에서 이 스크립트를 통해 자동으로 처리됩니다 :sunglasses:

따라서 우리에게는 정말로 다음과 같이 간단하게 처리할 수 있어야 합니다:

npm install -g pnpm
pnpm install

이곳에서 한 가지 질문이 있습니다, 데이비드:

로컬에서 린팅(linting)을 실행하는 방법은 무엇인가요?

예를 들어, yarn prettier --write plugins/discourse-events를 대체하는 명령어는 무엇인지요?

pnpm pprettier --write plugins/discourse-events

을 실행해 보았지만 다음과 같은 오류가 발생합니다:

Error: File not found with singular glob: /Users/blah/dev/disc/discourse/plugins/discourse-events (if this was purposeful, use allowEmpty option)

p가 너무 많은 것 같지 않나요?

원하는 명령은 다음과 같습니다:

pnpm prettier --write plugins/discourse-events

pprettier는 prettier를 병렬로 실행하는 도구이지만, 이렇게 단일 디렉터리에서 실행하는 것은 지원하지 않는 것 같습니다.

FOSS 문서에 기여해 주셔서 감사합니다, @david :lol: 해당 페이지가 Windows를 중심으로 작성된 것으로 보이며, 거기에 있는 정보는 pnpm을 사용하려면 필요한 지식일 수 있습니다. 해당 유틸리티의 경우 두 가지 모두 해당되지 않음을 편집하여 명확히 하겠습니다.

명확히 하자면, pnpm이 작동하는 방식에 대한 정보는 사용자/개발자의 편의를 위해 제공되는 것입니다. 여기에는 우리의 킷에서 중요하고 자주 사용되던 도구를 대체하는 이 새로운 도구를 이해하고 싶어 할 수도 있는 분들도 포함됩니다.

Discourse 개발자를 위한 이 정보는 파일들이 어디에 위치하는지와 기본 위치를 어떻게 변경하는지를 설명합니다. 이는 “내 node_modules가 모두 한 곳에 모였는데, 어디에 있나요?”라는 질문에 답하기 위한 것입니다. Discourse 컨테이너에서는 개발자 여러분이 패키지를 기본 위치에 두지 않기를 원할 수 있습니다. 만약 어떤 이유로 플러그인 개발자가 node_modules 폴더를 직접 참조하다가 파일 대신 다른 위치를 가리키는 링크를 발견한다면, 해당 페이지의 정보는 그 위치가 어떻게 결정되는지를 간결하게 설명해 줍니다.

간결하게 하려다 보니 이렇게 길어졌네요. :facepalm: :lolsob:

어쨌든, pnpm으로 전환한 것은 좋은 선택이며, 감사합니다.

네, pprettier은 적절하지 않았네요. 감사합니다.

최종적으로 문제를 해결했습니다.

린팅 검사를 실행하려면(디스코urs 디렉터리에서 실행하더라도) 플러그인 디렉터리에서 먼저 pnpm install을 실행해야 하는 것 같습니다.

흠, 재밌네요 :thinking:

우리의 표준 플러그인 스켈레톤에서는 각 플러그인이 자체 package.json 파일과 린팅 의존성을 가집니다. 그리고 현재 스켈레톤은 여전히 yarn을 사용하고 있습니다.

따라서 특정 플러그인을 린트하려면 플러그인 디렉터리로 이동하여 다음을 실행하면 됩니다.

yarn install
yarn prettier --write

플러그인에 코어의 린팅 설정을 사용하는 방식이 때로는 잘 작동할 수 있습니다. 하지만 버전/설정이 달라지면 코어의 eslint/prettier 버전이 플러그인의 CI에서 실행되는 버전과 일치하지 않아 문제가 생길 수 있습니다.

플러그인 디렉터리에서도 pnpm을 사용하도록 고려할 수 있을까요?

아직도 로컬 package.json을 사용 중이죠?

네, 반드시 그렇게 할 것입니다! 그 모험을 시작하기 전에 핵심 변경 사항에 대한 논의가 일단락되기를 기다리고 있습니다.

(참고: CDCK는 업데이트가 필요한 테마/플러그인 저장소를 거의 600개나 유지 관리하고 있습니다 :sweat_smile:)

네, 문제없습니다!

이것은 올바르게 작동한 것으로 보이지만, 표준 설치 사이트에는 자동 적용되지 않으며 수동으로 수행해야 한다고 언급된 통보에 대해 혼란을 느꼈습니다:

@Architect 감사합니다. 이 PR들은 업그레이드 메시지를 억제할 것입니다:

웹 도구를 통해 업그레이드하는 과정에서 문제가 발생했습니다. 업그레이드 페이지에 업그레이드 실패와 함께 Expected version "please-use-pnpm" 오류가 표시되었는데, 이후 다시 버전(Versions) 페이지를 방문했을 때 업그레이드가 성공한 것으로 보였습니다:

…하지만 이제 관리자 페이지 중 어느 것도 작동하지 않습니다:

업데이트:
명령줄에서 재빌드(rebuild)를 수행했고, 이로 인해 문제가 해결되었습니다.

@alxndr 님, 보고해 주셔서 감사합니다.

이 수정을 방금 적용했는데, 다른 사용자들에게도 이런 문제가 발생하지 않도록 막을 수 있을 것입니다.

아마도 저희 Communiteq 환경 때문일 수도 있지만, 솔직히 설치 중에 속도 개선이 눈에 띄게 느껴지지 않습니다. 저희의 안정적 테스트 설치 환경이 테스트 통과 환경보다 오히려 23초 더 빠르게 설치됩니다.