При запуске CLI Discourse Theme в репозитории компонента темы с установленными через pnpm пакетами в node_modules, команда discourse_theme watch . возвращает ошибки о том, что директории node_modules/.pnpm уже отслеживаются. На первый взгляд, это связано с тем, что пакеты являются символическими ссылками.
Я протестировал это в свежем GitHub Codespace с использованием официального компонента темы mermaid и версии discourse_theme 2.1.3.
Фрагмент логов ошибок
** ОШИБКА: директория уже отслеживается! **
Директория: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/ember-template-recast@6.1.5/node_modules/@glimmer/reference
уже отслеживается через: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@glimmer+reference@0.84.3/node_modules/@glimmer/reference
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: https://github.com/guard/listen/blob/master/README.md
** ОШИБКА: директория уже отслеживается! **
Директория: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry
уже отслеживается через: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: https://github.com/guard/listen/blob/master/README.md
Я подозреваю, что проблема связана с тем, что discourse_theme отслеживает всю директорию без каких-либо исключений для node_modules/.pnpm или node_modules в целом.
Это не критичная проблема, так как discourse_theme watch продолжает работать нормально после появления ошибок, но я не вижу сообщения "Watching for changes..." (Отслеживание изменений…), которое должно выводиться после ошибок согласно https://github.com/discourse/discourse_theme/blob/main/lib/discourse_theme/watcher.rb#L45-L48, что может вызвать путаницу. Кроме того, неприятно переходить с npm/yarn на pnpm, чтобы затем увидеть, как CLI выдает на экран кучу ошибок.
Я использую его из самого каталога TC, так как обычно разрабатываю или тестирую тему либо на локальном экземпляре разработки, либо на копии форума для разработки, не находящейся на моем компьютере, либо на сайте Theme Creator (создатель API-ключей, похоже, в последнее время не работает). Пытаюсь избежать путаницы с тем, в какой среде я работаю.
Я склонировал mermaid TC в тот же codespace, что и свежая установка discourse, и попытался запустить discourse_theme watch из каталога discourse. Ошибки те же.
Конечно, это произвольно, но немного нелепо требовать запускать discourse_theme из локальной копии discourse, когда тестируемый экземпляр discourse не является локальным.
В любом случае, я сделал так, как вы предложили: и в свежем GitHub Codespace, и в своей собственной среде разработки, но всё равно возникают те же ошибки.
Прочитав весь лог (или все записи, которые помещаются в историю терминала), я заметил, что все ошибки возникают в директории /node_modules/.pnpm. При тестировании и запуске discourse_theme против другого TC, который ещё не обновлён для использования pnpm вместо yarn, я не вижу никаких ошибок. Поэтому я почти на 100% уверен, что проблема в отслеживании .pnpm.
Согласно Symlinked `node_modules` structure | pnpm, обычная структура node_modules сохраняется путём перемещения всего реального кода в /node_modules/.pnpm, а остальные директории в /node_modules/ являются просто символическими ссылками на .pnpm. Таким образом, игнорирование .pnpm позволяет избежать ошибки «директория уже отслеживается!».
Я немного поэкспериментировал с gem discourse_theme и добавил listener.ignore /node_modules\/\.pnpm/ в файл watcher.rb, и это работает без каких-либо сообщений об ошибках. Более того, система даже обнаружила установку нового пакета через pnpm.
Этот PR применит правило игнорирования и подавит предупреждения. Спасибо за создание темы и расследование @Alteras — эти предупреждения тоже меня раздражали!