Переиспользуемый шаблон для JS проектов с husky, changelog, GitHub tools и конфигурируемым workflow.
npm install -D @vv0rkz/js-template
npx jst initinit создаст все конфиги, хуки, labels и настроит проект.
npm update @vv0rkz/js-template
npx jst upgradeupgrade обновит хуки, конфиги commitlint/changelog, и создаст jst.config.js если его ещё нет.
Все настройки в одном файле — jst.config.js в корне проекта.
export default {
// Формат веток (шаблоны, не regex)
branch: {
main: 'main',
patterns: [
'v{version}-{name}', // v2.3.0-dark-theme
// 'feature/#{issue}-{name}', // feature/#12-dark-theme
// 'release/v{version}', // release/v2.3.0
],
},
// GitHub labels
labels: [
{ name: 'task', color: '0E8A16', description: 'Новая фича', emoji: '✨' },
{ name: 'bug', color: 'D73A4A', description: 'Баг', emoji: '🐛' },
// добавь свои...
],
// Правила коммитов
commits: {
types: ['feat', 'fix', 'refactor', 'build', 'chore', 'docs', 'perf'],
requireIssue: ['feat', 'fix'], // эти типы требуют #номер
closeKeyword: 'close', // слово для закрытия issue
},
// Релиз
release: {
requireDemo: true, // требовать GIF/PNG перед релизом
demoDir: 'docs', // где искать демо
demoFormats: ['gif', 'png'],
},
// Автообновление зависимостей
depUpdater: false, // 'dependabot' | 'renovate' | false
// Репозиторий JST для report-issue
jstRepo: 'vv0rkz/js-template',
}| Что изменил | Когда вступит в силу |
|---|---|
branch.pattern |
На следующем git push |
commits.* |
На следующем git commit |
release.* |
На следующем jst release |
labels |
После jst setup-labels или jst apply |
depUpdater |
После jst setup-deps или jst apply |
Короткий путь — jst apply применит labels + deps за раз.
npm run _ <команда> # короткая форма
npm run jst <команда> # полная форма
npx jst <команда> # напрямую| Команда | Описание |
|---|---|
init |
Инициализация нового проекта |
upgrade |
Обновить конфиги после npm update |
apply |
Применить изменения из jst.config.js |
setup-labels |
Настроить GitHub labels |
setup-deps |
Настроить dependabot/renovate |
| Команда | Описание |
|---|---|
release |
Полный релиз (changelog + README) |
push-release |
Создать PR и смерджить в main |
changelog |
Создать changelog |
update-readme |
Обновить README с версией |
| Команда | Описание |
|---|---|
tasks |
Список задач |
create-task [название] |
Создать задачу |
bugs |
Список багов |
create-bug [название] |
Создать баг |
refactors |
Список рефакторингов |
create-refactor [название] |
Создать рефакторинг |
perfs |
Список оптимизаций |
create-perf [название] |
Создать оптимизацию |
all-issues |
Все открытые issues |
report-issue [описание] |
Сообщить о проблеме в JST |
| Команда | Описание |
|---|---|
pr-list |
Показать все PR |
pr-view <n> |
Посмотреть PR в терминале |
pr-view-web <n> |
Открыть PR в браузере |
pr-merge <n> |
Смерджить PR |
pr-close <n> |
Закрыть PR без merge |
feat: #9 добавить тёмную тему # фича, ссылка на issue
feat(Date): #9 добавить форматирование # фича со scope
feat: close #9 добавить тёмную тему # фича + закрыть issue
feat(parser): close #9 финализировать # scope + закрыть issue
fix: #10 исправить валидацию # фикс, ссылка на issue
fix(auth): close #10 исправить валидацию # фикс + scope + закрыть
refactor: оптимизировать алгоритм # без issue
refactor(utils): оптимизировать хелперы # без issue, со scope
docs: обновить README # без issue
chore(release): v1.2.0 # авто-релизПо умолчанию feat: #9 ... и fix: #9 ... не закрывают issue — только ссылаются. Чтобы закрыть, добавь ключевое слово close перед номером:
# Несколько коммитов по одной задаче
git commit -m "feat: #9 добавить компонент кнопки"
git commit -m "feat: #9 добавить стили кнопки"
git commit -m "feat: close #9 финализировать кнопку" # ← закроет issueКлючевое слово настраивается через commits.closeKeyword в конфиге.
Ветки задаются шаблонами, без regex. Доступные плейсхолдеры:
| Плейсхолдер | Что матчит | Пример |
|---|---|---|
{version} |
Семвер X.Y.Z | 2.3.0 |
{issue} |
Номер issue | 12 |
{name} |
Описание (буквы, цифры, -, _) |
dark-theme |
* |
Что угодно | anything/here |
// Классический стиль
patterns: ['v{version}-{name}']
// ✅ v2.3.0-normalize-operators
// GitHub Flow стиль
patterns: ['feature/#{issue}-{name}', 'fix/#{issue}-{name}', 'release/v{version}']
// ✅ feature/#12-dark-theme
// ✅ fix/#7-validation-bug
// ✅ release/v2.3.0
// Без ограничений
patterns: ['*']# 1. Создать задачу
npm run _ create-task "Добавить тёмную тему" # → issue #12
# 2. Создать ветку
git checkout -b v1.3.0-dark-theme
# 3. Работать и коммитить
git commit -m "feat: #12 добавить переключатель темы"
git commit -m "feat: #12 добавить CSS переменные"
git commit -m "feat: close #12 финальные стили" # закрыть issue
# 4. Релиз
npm run _ release
npm run _ push-releasejst.config.js— единый конфиг проекта.husky/— хуки (commit-msg, pre-push, post-commit)commitlint.config.js— проверка коммитов (читает из jst.config.js)changelog.config.js— генерация changelog (читает из jst.config.js).gitignore- GitHub labels (если установлен
gh) - dependabot/renovate (если включён в конфиге)
- Husky — Git hooks
- Commitlint — Проверка коммитов
- Changelogen — Генерация changelog
- GitHub CLI — Управление issues
MIT © vv0rkz