Мы переходим с менеджера пакетов JS ядра Discourse с ‘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 "..."
Чтобы решить эту проблему, выполните следующие шаги:
выполните npm install -g pnpm
выполните pnpm install
замените все использования yarn ... в вашей среде разработки на pnpm ...
Плагины / Темы
Мы перешли на использование pnpm для зависимостей линтинга в наших официальных плагинах и темах.
Для discourse_theme CLI вам необходимо обновить локальную версию, выполнив gem update discourse_theme.
Возврат к yarn
Если вам нужно вернуться к версии Discourse на основе yarn (например, при разработке на стабильной ветке), вам необходимо вручную удалить все директории node_modules ядра:
Я участвую в другом проекте с открытым исходным кодом (FOSS), где совсем недавно впервые познакомился с PNPM. Переход оказался предельно простым, плавным, эффективным и настоящим удовольствием.
Я подготовил краткие заметки в документации того проекта о том, что такое PNPM и как им пользоваться. Хотя мелкие детали различаются в каждом проекте, надеюсь, что эта информация может послужить быстрым введением для любого из вас, кто, как и я, не имел ни малейшего представления до объявления.
Стоит отметить, однако, что ни одно из «примечаний по конфигурации» там не требуется для Discourse. Не знаю, зачем им это нужно… может быть, потому что это приложение для Windows?
Также их примечание о том, что «в существующем проекте просто удалите папку ‘node_modules’», в Discourse обрабатывается автоматически этим скриптом
Так что для нас это должно быть действительно так просто:
То есть, что заменяет, например: 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 (если это было намеренно, используйте опцию allowEmpty)
Спасибо за ваш вклад в документацию FOSS, @david Действительно, страница, похоже, ориентирована на Windows, и информация там может быть необходима для работы с pnpm. Я отредактирую текст и проясню, что это не так для этой утилиты.
Для ясности: информация о том, как работает pnpm, добавлена только для удобства пользователя/разработчика, включая тех, кто здесь и кто, возможно, захочет понять этот новый инструмент, заменяющий важный и часто используемый инструмент в нашем наборе.
Для разработчиков Discourse эта информация объясняет, где находятся файлы и как изменить пути по умолчанию. Это призвано ответить на вопрос вроде: «Если все мои node_modules теперь в одном месте, где они?» В контейнере Discourse вы, разработчики, можете не хотеть размещать пакеты в расположении по умолчанию. Если по какой-то причине разработчик плагина напрямую обращается к папке node_modules и находит ссылки на другое место, а не на файлы, информация на этой странице кратко объясняет, как определяется это расположение.
Вот так я попытался быть кратким.
В любом случае, отличный переход на pnpm, спасибо.
В нашем стандартном скелете плагина у каждого плагина есть свой файл package.json с зависимостями для линтинга. И пока что скелет всё ещё использует yarn.
Так что для линтинга конкретного плагина нужно перейти в директорию плагина и выполнить:
yarn install
yarn prettier --write
Использование конфигурации линтинга из ядра для плагинов иногда работает. Но если версии или конфигурация расходятся, это может стать проблематичным, так как версия eslint/prettier в ядре не будет совпадать с версией, используемой в CI вашего плагина.
Кажется, всё сработало правильно, но меня сбило с толку уведомление, в котором, похоже, говорится, что это нужно делать вручную и что для сайтов со стандартной установкой это не автоматически:
Возможно, это связано с нашей средой Communiteq, но, честно говоря, я не вижу никаких значительных улучшений скорости во время установки? Наш стабильный тестовый установочный процесс даже на 23 секунды быстрее, чем тестовый с меткой «тесты пройдены».