refunjs
Version:
Modern React-based framework for building scalable web applications with enhanced developer experience
610 lines (429 loc) • 21 kB
Markdown
# RefunJS
Repository has a [English :uk:](#refunjs-uk) and [Ukrainian :ukraine:](#refunjs-ukraine) localization.
## RefunJS :uk:
🚀 A modern React framework with file-based routing, built-in tooling, and zero-config setup. Create production-ready React applications in seconds.
### Overview
RefunJS is a CLI tool and framework that streamlines React application development by providing:
- **Zero-config setup** — Start coding immediately without spending hours on configuration
- **File-based routing** — Automatic route generation based on your folder structure
- **Modern tooling** — Pre-configured TypeScript, Vite, ESLint, and Prettier
- **Smart defaults** — Carefully selected libraries and patterns that work together seamlessly
- **Optional features** — Add testing (Jest) and internationalization (i18n) when you need them
RefunJS eliminates the repetitive setup work while maintaining full flexibility and control over your codebase.
### Features
- ⚡ **Instant Setup** — Create a full-featured React project with one command
- 🎯 **File-based Routing** — Automatic routing from `pages/` folder structure, including dynamic routes
- 🎨 **CSS Modules** — Scoped styling with CSS variables and dark mode support out of the box
- 📦 **Pre-installed Stack** — React Query, Zustand, React Router pre-configured and ready to use
- 🔧 **Full TypeScript** — Type safety across the entire project with optimized tsconfig
- 🚀 **Vite Powered** — Lightning-fast HMR and optimized production builds
- 🌍 **i18n Ready** — Optional multi-language support with i18next integration
- 🧪 **Testing Setup** — Optional Jest configuration with React Testing Library
- 📝 **Code Quality** — ESLint and Prettier pre-configured with sensible rules
- 🛠️ **CLI Tools** — Generate pages and components with proper structure and naming conventions
### Technologies Used
#### Core Framework
- **React** — Latest React with modern features
- **TypeScript** — Type-safe development
- **Vite** — Next-generation frontend tooling
#### State & Routing
- **React Router** — Declarative routing for React
- **React Query** — Powerful data synchronization and caching
- **Zustand** — Lightweight state management
#### Development Tools
- **ESLint** — Pluggable linting utility
- **Prettier** — Opinionated code formatter
- **Jest** (optional) — Delightful JavaScript testing
- **i18next** (optional) — Internationalization framework
#### Styling
- **CSS Modules** — Component-scoped CSS
- **Lucide React** — Beautiful & consistent icon toolkit
## Getting Started
To get started with RefunJS development, follow these steps:
#### 1. Clone the Repository
```bash
git clone https://github.com/NikitaBerezhnyj/RefunJS.git
cd refunjs
```
#### 2. Install Dependencies
```bash
npm install
```
#### 3. Build the CLI
```bash
npm run build
```
#### 4. Link Locally for Testing
```bash
npm link
```
Now you can use the `refunjs` command globally on your system for testing:
```bash
refunjs my-test-app
cd my-test-app
npm run dev
```
#### 5. Project Structure
```
refunjs/
├── src/
│ ├── commands/ # CLI command implementations
│ │ ├── createProject.js
│ │ ├── addPage.js
│ │ ├── addComponent.js
│ │ ├── installCommand.js
│ │ └── helpCommand.js
│ ├── utils/ # Helper functions
│ │ ├── copyDir.js
│ │ ├── replaceInFiles.js
│ │ ├── installDependencies.js
│ │ ├── mergeFiles.js
│ │ └── namingUtils.js
│ └── index.js # CLI entry point
├── core/ # Base project template
│ ├── src/
│ │ ├── .refunjs/ # Framework system files
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── hooks/ # Custom hooks
│ │ ├── utils/ # Utilities
│ │ └── styles/ # Global styles
│ ├── public/
│ ├── package.json
│ ├── tsconfig.json
│ └── vite.config.ts
├── features/ # Optional feature modules
│ ├── test/ # Jest testing setup
│ └── i18n/ # Internationalization
├── package.json
└── README.md
```
### Usage
Once the project is set up for development, you can:
#### 1. Test CLI Commands
Create a test project to verify changes:
```bash
refunjs create test-project
cd test-project
npm run dev
```
#### 2. Modify the Core Template
Edit files in the `core/` directory to change the default project structure:
- Update `core/src/` to modify the base application
- Add new components in `core/src/components/`
- Modify styling in `core/src/styles/`
- Update dependencies in `core/package.json`
#### 3. Add or Modify Features
Work on optional features in the `features/` directory:
- **Testing setup**: `features/test/`
- **Internationalization**: `features/i18n/`
Each feature module contains:
- Component modifications/additions
- Configuration files
- Dependencies in `package.json`
#### 4. Update CLI Commands
Modify command implementations in `src/commands/`:
- `createProject.js` — Project initialization logic
- `addPage.js` — Page generation with file-based routing
- `addComponent.js` — Component scaffolding
- `installCommand.js` — Dependency management
- `helpCommand.js` — CLI help documentation
#### 5. Test Changes
Before submitting changes:
```bash
# Build the CLI
npm run build
# Test in a clean directory
cd /tmp
refunjs test-app
cd test-app
npm run dev
npm run build
npm run test # If test feature was selected
```
#### 6. Code Quality
Maintain code quality:
```bash
# Format code
npm run format
# Lint code (if configured)
npm run lint
```
### Development Workflow
1. **Make Changes** — Edit files in `src/`, `core/`, or `features/`
2. **Build** — Run `npm run build` to compile changes
3. **Test** — Create a test project and verify functionality
4. **Commit** — Use clear, descriptive commit messages
5. **Submit PR** — Open a pull request with your changes
### Building and Publishing
#### Prerequisites
Before publishing to npm, ensure you have:
- An npm account (create one at [npmjs.com](https://www.npmjs.com/signup))
- Logged into npm CLI: `npm login`
- Proper version number updated in `package.json`
#### Build for Production
Build the project before publishing:
```bash
npm run build
```
This compiles the source code from `src/` to `dist/` using Babel.
#### Version Management
Update the version number following [Semantic Versioning](https://semver.org/):
```bash
# Patch release (1.0.5 → 1.0.6) - bug fixes
npm version patch
# Minor release (1.0.5 → 1.1.0) - new features, backward compatible
npm version minor
# Major release (1.0.5 → 2.0.0) - breaking changes
npm version major
```
#### Publishing to npm
Publish the package to npm registry:
```bash
npm publish --access public
```
The `--access public` flag is required for scoped packages or first-time publishing.
#### Automated Publishing Workflow
The `package.json` includes automated scripts that run during publishing:
- `prepublishOnly` — Backs up and replaces README with docs version
- `postpublish` — Restores the original README
#### Manual Publishing Steps
1. **Update version**:
```bash
npm version patch # or minor/major
```
2. **Build the project**:
```bash
npm run build
```
3. **Test the build locally**:
```bash
npm link
refunjs test-app
```
4. **Publish to npm**:
```bash
npm publish --access public
```
5. **Verify publication**:
- Check on [npmjs.com/package/refunjs](https://www.npmjs.com/package/refunjs)
- Test installation: `npm install -g refunjs`
### License & Community Guidelines
- [License](LICENSE) — project license
- [Code of Conduct](CODE_OF_CONDUCT.md) — expected behavior for contributors
- [Contributing Guide](CONTRIBUTING.md) — how to help the project
- [Security Policy](SECURITY.md) — reporting security issues
---
## RefunJS :ukraine:
🚀 Сучасний React фреймворк з file-based роутингом, вбудованим інструментарієм та налаштуванням без конфігурації. Створюйте готові до продакшену React-додатки за лічені секунди.
### Огляд
RefunJS — це CLI інструмент та фреймворк, який спрощує розробку React-додатків, надаючи:
- **Налаштування без конфігурації** — Почніть кодувати одразу, не витрачаючи години на налаштування
- **File-based роутинг** — Автоматична генерація маршрутів на основі структури папок
- **Сучасний інструментарій** — Преконфігуровані TypeScript, Vite, ESLint та Prettier
- **Розумні налаштування за замовчуванням** — Ретельно підібрані бібліотеки та патерни, які безперешкодно працюють разом
- **Опціональні функції** — Додавайте тестування (Jest) та інтернаціоналізацію (i18n), коли вам це потрібно
RefunJS усуває повторювану роботу з налаштування, зберігаючи повну гнучкість та контроль над вашою кодовою базою.
### Особливості
- ⚡ **Миттєве налаштування** — Створіть повнофункціональний React-проєкт однією командою
- 🎯 **File-based роутинг** — Автоматичний роутинг із структури папки `pages/`, включаючи динамічні маршрути
- 🎨 **CSS Modules** — Ізольована стилізація зі змінними CSS та підтримкою темної теми з коробки
- 📦 **Преінстальований стек** — React Query, Zustand, React Router преконфігуровані та готові до використання
- 🔧 **Повна підтримка TypeScript** — Типобезпека у всьому проєкті з оптимізованим tsconfig
- 🚀 **На основі Vite** — Блискавично швидкий HMR та оптимізовані production збірки
- 🌍 **Готовність до i18n** — Опціональна підтримка багатомовності з інтеграцією i18next
- 🧪 **Налаштування тестування** — Опціональна конфігурація Jest з React Testing Library
- 📝 **Якість коду** — ESLint та Prettier преконфігуровані з розумними правилами
- 🛠️ **CLI інструменти** — Генеруйте сторінки та компоненти з правильною структурою та конвенціями іменування
### Використані технології
#### Основний фреймворк
- **React** — Найновіший React з сучасними можливостями
- **TypeScript** — Типобезпечна розробка
- **Vite** — Інструментарій фронтенду нового покоління
#### Стан та роутинг
- **React Router** — Декларативний роутинг для React
- **React Query** — Потужна синхронізація та кешування даних
- **Zustand** — Легке управління станом
#### Інструменти розробки
- **ESLint** — Утиліта для лінтингу з підтримкою плагінів
- **Prettier** — Опініонований форматувач коду
- **Jest** (опціонально) — Чудовий фреймворк для тестування JavaScript
- **i18next** (опціонально) — Фреймворк інтернаціоналізації
#### Стилізація
- **CSS Modules** — CSS з областю видимості компонента
- **Lucide React** — Красивий та консистентний набір іконок
### Початок роботи
Щоб почати розробку RefunJS, виконайте наступні кроки:
#### 1. Клонуйте репозиторій
```bash
git clone https://github.com/NikitaBerezhnyj/RefunJS.git
cd refunjs
```
#### 2. Встановіть залежності
```bash
npm install
```
#### 3. Зберіть CLI
```bash
npm run build
```
#### 4. Зв'яжіть локально для тестування
```bash
npm link
```
Тепер ви можете використовувати команду `refunjs` глобально у вашій системі для тестування:
```bash
refunjs my-test-app
cd my-test-app
npm run dev
```
#### 5. Структура проєкту
```
refunjs/
├── src/
│ ├── commands/ # Реалізації CLI команд
│ │ ├── createProject.js
│ │ ├── addPage.js
│ │ ├── addComponent.js
│ │ ├── installCommand.js
│ │ └── helpCommand.js
│ ├── utils/ # Допоміжні функції
│ │ ├── copyDir.js
│ │ ├── replaceInFiles.js
│ │ ├── installDependencies.js
│ │ ├── mergeFiles.js
│ │ └── namingUtils.js
│ └── index.js # Точка входу CLI
├── core/ # Базовий шаблон проєкту
│ ├── src/
│ │ ├── .refunjs/ # Системні файли фреймворку
│ │ ├── components/ # Компоненти для повторного використання
│ │ ├── pages/ # Компоненти сторінок
│ │ ├── hooks/ # Кастомні хуки
│ │ ├── utils/ # Утиліти
│ │ └── styles/ # Глобальні стилі
│ ├── public/
│ ├── package.json
│ ├── tsconfig.json
│ └── vite.config.ts
├── features/ # Модулі опціональних функцій
│ ├── test/ # Налаштування тестування Jest
│ └── i18n/ # Інтернаціоналізація
├── package.json
└── README.md
```
### Використання
Після налаштування проєкту для розробки, ви можете:
#### 1. Тестувати CLI команди
Створіть тестовий проєкт для перевірки змін:
```bash
refunjs create test-project
cd test-project
npm run dev
```
#### 2. Модифікувати основний шаблон
Редагуйте файли в директорії `core/` для зміни структури проєкту за замовчуванням:
- Оновіть `core/src/` для модифікації базового додатку
- Додайте нові компоненти в `core/src/components/`
- Змініть стилізацію в `core/src/styles/`
- Оновіть залежності в `core/package.json`
#### 3. Додавати або модифікувати функції
Працюйте над опціональними функціями в директорії `features/`:
- **Налаштування тестування**: `features/test/`
- **Інтернаціоналізація**: `features/i18n/`
Кожен модуль функції містить:
- Модифікації/доповнення компонентів
- Конфігураційні файли
- Залежності в `package.json`
#### 4. Оновлювати CLI команди
Модифікуйте реалізації команд в `src/commands/`:
- `createProject.js` — Логіка ініціалізації проєкту
- `addPage.js` — Генерація сторінок з file-based роутингом
- `addComponent.js` — Створення каркасу компонентів
- `installCommand.js` — Управління залежностями
- `helpCommand.js` — Довідкова документація CLI
#### 5. Тестувати зміни
Перед відправкою змін:
```bash
# Зберіть CLI
npm run build
# Протестуйте в чистій директорії
cd /tmp
refunjs test-app
cd test-app
npm run dev
npm run build
npm run test # Якщо була обрана функція тестування
```
#### 6. Якість коду
Підтримуйте якість коду:
```bash
# Форматуйте код
npm run format
# Перевірте код лінтером
npm run lint
```
### Робочий процес розробки
1. **Внесіть зміни** — Редагуйте файли в `src/`, `core/` або `features/`
2. **Зберіть** — Запустіть `npm run build` для компіляції змін
3. **Протестуйте** — Створіть тестовий проєкт та перевірте функціональність
4. **Зробіть коміт** — Використовуйте чіткі, описові повідомлення коміту
5. **Відправте PR** — Відкрийте pull request з вашими змінами
### Збірка та публікація
#### Передумови
Перед публікацією в npm, переконайтеся що у вас є:
- Обліковий запис npm (створіть на [npmjs.com](https://www.npmjs.com/signup))
- Виконаний вхід в npm CLI: `npm login`
- Оновлений номер версії в `package.json`
#### Збірка для продакшену
Зберіть проєкт перед публікацією:
```bash
npm run build
```
Це компілює вихідний код з `src/` в `dist/` використовуючи Babel.
#### Управління версіями
Оновіть номер версії дотримуючись [Семантичного версіонування](https://semver.org/):
```bash
# Patch реліз (1.0.5 → 1.0.6) - виправлення помилок
npm version patch
# Minor реліз (1.0.5 → 1.1.0) - нові функції, зворотна сумісність
npm version minor
# Major реліз (1.0.5 → 2.0.0) - критичні зміни
npm version major
```
#### Публікація в npm
Опублікуйте пакет в реєстр npm:
```bash
npm publish --access public
```
Прапорець `--access public` обов'язковий для scoped пакетів або першої публікації.
#### Автоматизований процес публікації
`package.json` включає автоматизовані скрипти, які виконуються під час публікації:
- `prepublishOnly` — Створює резервну копію та замінює README версією з docs
- `postpublish` — Відновлює оригінальний README
#### Ручні кроки публікації
1. **Оновіть версію**:
```bash
npm version patch # або minor/major
```
2. **Зберіть проєкт**:
```bash
npm run build
```
3. **Протестуйте збірку локально**:
```bash
npm link
refunjs test-app
```
4. **Опублікуйте в npm**:
```bash
npm publish --access public
```
5. **Перевірте публікацію**:
- Перевірте на [npmjs.com/package/refunjs](https://www.npmjs.com/package/refunjs)
- Протестуйте встановлення: `npm install -g refunjs`
### Ліцензія та правила спільноти
- [Ліцензія](LICENSE) — ліцензія проєкту
- [Кодекс поведінки](CODE_OF_CONDUCT.md) — очікувана поведінка для контриб'юторів
- [Посібник з внеску](CONTRIBUTING.md) — як допомогти проєкту
- [Політика безпеки](SECURITY.md) — повідомлення про проблеми безпеки