Участие в разработке
Участвовать в экосистеме Nuxt можно по-разному.
Экосистема
В экосистему Nuxt входят разные проекты и организации:
- nuxt/ — основные репозитории фреймворка. nuxt/nuxt содержит Nuxt (версии 2 и 3).
- nuxt-modules/ — модули и библиотеки от сообщества. Есть процесс переноса модуля в
nuxt-modules; у модулей свои мейнтейнеры, без зависимости от одного человека. - unjs/ — многие библиотеки используются в экосистеме Nuxt. Они задуманы как универсальные, без привязки к фреймворку и окружению. Вклад и использование другими фреймворками приветствуются.
Как участвовать
Триаж issues и помощь в обсуждениях
Просматривайте issues и обсуждения интересующих проектов. Например: доска issues и обсуждения Nuxt. Помощь другим, обмен обходными путями, создание воспроизведений или разбор бага с описанием выводов очень помогают.
Создание issue
Спасибо, что нашли время создать issue! ❤️
- Сообщение о багах: см. наш гайд перед созданием issue.
- Запросы функций: проверьте, нет ли уже issue или обсуждения по этой теме. Если функция относится к другой части экосистемы (например, модулю), лучше создать запрос там. Если идея общая или API неочевиден, можно открыть обсуждение в категории Ideas.
Мы по возможности следуем внутренней блок-схеме по принятию решений по issues при ответах на issues.
Pull Request
Pull request'ы всегда приветствуются! ❤️
Перед началом
Перед исправлением бага лучше проверить, есть ли issue с его описанием — возможно, это вопрос документации или есть контекст, который стоит учесть.
Для новой функции сначала откройте issue с запросом функции, чтобы обсудить с мейнтейнерами необходимость и дизайн. Это сэкономит время и ускорит выход фичи. Issue должен подтвердить участник команды фреймворка перед реализацией в PR.
Опечатки лучше собирать в один PR для более чистой истории коммитов.
Для крупных изменений в Nuxt рекомендуем сначала создать модуль Nuxt и реализовать фичу там (быстрый proof-of-concept), затем создать RFC в виде обсуждения. После принятия сообществом и сбора отзывов фичу можно доработать и включить в ядро Nuxt или оставить отдельным модулем.
Соглашения по коммитам
Используем Conventional Commits; по ним автоматически генерируется changelog. Прочитайте гайд, если ещё не знакомы.
fix: и feat: — для изменений кода (влияющих на логику). Для опечаток и правок документов используйте docs: или chore::
→fix: typodocs: fix typo
В монорепо (например, nuxt/nuxt) указывайте scope в скобках: feat(kit): add 'addMagicStuff' utility.
Оформление PR
Если не знаете, как отправить PR, см. гайд GitHub.
Заголовок PR тоже должен следовать соглашениям по коммитам.
Если PR закрывает существующие issues — укажите их в описании.
Несколько коммитов в одном PR допустимы; не обязательно делать rebase или force push — при мерже используем «Squash and Merge».
Мы не добавляем pre-commit хуки, чтобы не мешать быстрым коммитам. Перед отправкой PR убедитесь, что проходят lint/test.
Старайтесь не включать в один PR несвязанные изменения (например, правки пробелов или форматирования в других частях файла). Один PR — одна задача.
После отправки PR
Мы по возможности оперативно просматриваем PR.
Назначение мейнтейнера означает, что он уделит ревью особое внимание и при необходимости внесёт правки.
Если просят изменения — не пугайтесь красного текста: это способ быстро видеть статус списка PR, а не оценка качества.
Статус «pending» обычно означает внутреннюю заметку по ревью, а не мнение о PR. По возможности поясним в комментарии.
Мы по возможности следуем блок-схеме по принятию решений по PR при ответах и ревью.
Вклад с помощью ИИ
Мы приветствуем осмысленное использование ИИ при контрибуции в Nuxt и просим следовать двум принципам.
Не позволяйте ИИ говорить за вас
- Комментарии, issues и описания PR должны быть написаны вашим голосом.
- Ценим ясное человеческое общение выше идеальной грамматики.
- Не копируйте готовые саммари от ИИ, если они не отражают ваше понимание.
Не позволяйте ИИ думать за вас
- Можно использовать ИИ для генерации кода или идей.
- Отправляйте только тот вклад, который вы полностью понимаете и можете объяснить.
- Вклад должен отражать вашу логику и подход к решению.
Цель — качество и радость от общения с живыми людьми. Если есть идеи по политике использования ИИ в сообществе Nuxt — напишите! ❤️
Создание модуля
Сделали что-то полезное на Nuxt? Можно оформить это как модуль и поделиться с другими. Модулей уже много, но места хватит ещё.
Нужна помощь при разработке — обращайтесь.
RFC
Рекомендуем сначала создать модуль для проверки крупной фичи и принятия сообществом.
Если это уже сделано или модуль не подходит — начните с нового обсуждения. Чётко изложите идею, приведите примеры кода или сигнатуры API, укажите существующие issues или боли с примерами.
Если мы сочтём это RFC, сменим категорию на RFC и шире запросим отзывы.
Этапы RFC:
rfc: active— открыт для комментариевrfc: approved— одобрен командой Nuxtrfc: ready to implement— создан issue и назначен исполнительrfc: shipped— реализованrfc: archived— не одобрен, но сохранён для справки
Соглашения в экосистеме
В организации nuxt/ следующие соглашения обязательны; в остальной экосистеме — рекомендуются.
Модули
Модули должны следовать шаблону Nuxt-модуля. Подробнее — гайд по модулям.
Использование библиотек unjs
Рекомендуемые библиотеки, используемые в экосистеме:
- pathe — универсальные утилиты для путей (замена node
path) - ufo — разбор и склейка URL
- obuild — сборка на rolldown
- … и другие в unjs/
ESM и type: module
Большая часть экосистемы Nuxt потребляет ESM. Рекомендуем избегать CJS-специфичного кода (__dirname, require). Подробнее — про ESM.
Corepack
Corepack обеспечивает использование нужной версии пакетного менеджера. В проектах может быть поле packageManager в package.json.
При такой конфигурации Corepack установит pnpm v7.5.0 (если его ещё нет) и будет использовать его для команд.
{
"packageManager": "pnpm@7.5.0"
}
ESLint
Используем ESLint для линтинга и форматирования с @nuxt/eslint.
Настройка IDE
Рекомендуем VS Code с расширением ESLint. При сохранении можно включить авто-исправление и форматирование:
{
"editor.codeActionsOnSave": {
"source.fixAll": "never",
"source.fixAll.eslint": "explicit"
}
}
Без Prettier
ESLint уже настроен на форматирование, дублировать его Prettier не нужно. Для форматирования: yarn lint --fix, pnpm lint --fix, bun run lint --fix или deno run lint --fix, либо настройка в разделе ESLint.
Если в редакторе установлен Prettier — лучше отключить его при работе с проектом, чтобы не было конфликтов.
Пакетный менеджер
Рекомендуем pnpm для модулей, библиотек и приложений.
Важно включить Corepack, чтобы версия менеджера совпадала с проектом. Corepack встроен в свежие версии Node.
Включение (один раз после установки Node):
corepack enable
Руководство по стилю документации
Документация — важная часть Nuxt. Мы стремимся быть интуитивным фреймворком, и во многом это зависит от качества документации и DX в экосистеме. 👌
Несколько советов:
- По возможности избегайте субъективных слов вроде просто, очевидно, всего лишь — у читателей разный опыт, эти слова не несут смысла и могут обидеть.Просто убедитесь, что функция возвращает промис.Убедитесь, что функция возвращает промис.
- Предпочитайте активный залог.Ошибка будет выброшена Nuxt.Nuxt выбросит ошибку.