| @ -0,0 +1,462 @@ | |||||
| # Development Workflow | |||||
| This guide covers the development workflow for working with Adminator, including running the development server, making changes, and best practices. | |||||
| ## Table of Contents | |||||
| - Quick Start | |||||
| - Development Server | |||||
| - Available npm Scripts | |||||
| - Making Changes | |||||
| - Hot Module Replacement | |||||
| - Code Quality & Linting | |||||
| - Debugging | |||||
| - Working with Components | |||||
| - Working with Styles | |||||
| - Best Practices | |||||
| - Common Issues | |||||
| - Next Steps | |||||
| ## Quick Start | |||||
| After [installation](installation.md), start the development server: | |||||
| ```bash | |||||
| npm start | |||||
| ``` | |||||
| Your application will be available at **http://localhost:4000** | |||||
| ## Development Server | |||||
| ### Standard Development Server | |||||
| The standard development server includes hot module replacement (HMR) for instant updates: | |||||
| ```bash | |||||
| npm start | |||||
| ``` | |||||
| **Features:** | |||||
| - Hot module replacement (HMR) | |||||
| - Automatic browser refresh | |||||
| - Source maps for debugging | |||||
| - Fast rebuild times | |||||
| - Runs on port 4000 | |||||
| ### Development Server with Dashboard | |||||
| For enhanced development experience with visual feedback: | |||||
| ```bash | |||||
| npm run dev | |||||
| ``` | |||||
| **Additional Features:** | |||||
| - Visual webpack dashboard | |||||
| - Real-time build statistics | |||||
| - Bundle size analysis | |||||
| - Build time metrics | |||||
| - Module dependency graph | |||||
| ## Available npm Scripts | |||||
| ### Development | |||||
| | Command | Description | | |||||
| |---------|-------------| | |||||
| | `npm start` | Start development server with HMR | | |||||
| | `npm run dev` | Start development server with webpack dashboard | | |||||
| | `npm run clean` | Clean the `dist/` directory | | |||||
| ### Production Build | |||||
| | Command | Description | | |||||
| |---------|-------------| | |||||
| | `npm run build` | Production build (optimized, minified) | | |||||
| | `npm run release:minified` | Production build with minification | | |||||
| | `npm run release:unminified` | Production build without minification (for debugging) | | |||||
| | `npm run preview` | Preview production build locally | | |||||
| ### Code Quality | |||||
| | Command | Description | | |||||
| |---------|-------------| | |||||
| | `npm run lint` | Run all linters (JavaScript + SCSS) | | |||||
| | `npm run lint:js` | Lint JavaScript files with ESLint | | |||||
| | `npm run lint:scss` | Lint SCSS files with Stylelint | | |||||
| ## Making Changes | |||||
| ### File Watching | |||||
| The development server automatically watches for changes in: | |||||
| - **HTML files** (`src/*.html`) | |||||
| - **JavaScript files** (`src/assets/scripts/**/*.js`) | |||||
| - **SCSS files** (`src/assets/styles/**/*.scss`) | |||||
| - **Static assets** (`src/assets/static/**/*`) | |||||
| Changes are automatically compiled and the browser refreshes. | |||||
| ### Workflow | |||||
| 1. **Start the development server** | |||||
| ```bash | |||||
| npm start | |||||
| ``` | |||||
| 2. **Make your changes** in the `src/` directory | |||||
| 3. **Save the file** - Changes are automatically detected | |||||
| 4. **Browser refreshes** - See your changes instantly | |||||
| ## Hot Module Replacement (HMR) | |||||
| HMR allows modules to be updated without a full page reload, preserving application state. | |||||
| ### What Gets Hot Reloaded? | |||||
| - ✅ **JavaScript modules** - Component updates without page reload | |||||
| - ✅ **SCSS/CSS** - Style updates without page reload | |||||
| - ⚠️ **HTML files** - Requires full page reload | |||||
| - ⚠️ **Configuration files** - Requires server restart | |||||
| ### HMR Benefits | |||||
| - Faster development cycle | |||||
| - Preserves application state | |||||
| - Instant visual feedback | |||||
| - Better debugging experience | |||||
| ## Code Quality & Linting | |||||
| ### JavaScript Linting (ESLint) | |||||
| Adminator uses ESLint 9.x with flat configuration: | |||||
| ```bash | |||||
| # Lint all JavaScript files | |||||
| npm run lint:js | |||||
| # Auto-fix issues (if possible) | |||||
| npx eslint ./src --fix | |||||
| ``` | |||||
| **Configuration:** `eslint.config.mjs` | |||||
| **Rules:** | |||||
| - ES6+ modern JavaScript | |||||
| - No jQuery patterns | |||||
| - Consistent code style | |||||
| - Import/export validation | |||||
| ### SCSS Linting (Stylelint) | |||||
| Maintain consistent SCSS code style: | |||||
| ```bash | |||||
| # Lint all SCSS files | |||||
| npm run lint:scss | |||||
| # Auto-fix issues (if possible) | |||||
| npx stylelint "./src/**/*.scss" --fix | |||||
| ``` | |||||
| **Configuration:** `.stylelintrc.json` | |||||
| ### Running All Linters | |||||
| ```bash | |||||
| npm run lint | |||||
| ``` | |||||
| This runs both JavaScript and SCSS linters in sequence. | |||||
| ## Debugging | |||||
| ### Source Maps | |||||
| Development builds include source maps for easier debugging: | |||||
| 1. Open browser DevTools (F12) | |||||
| 2. Navigate to Sources tab | |||||
| 3. Find your original source files under `webpack://` | |||||
| 4. Set breakpoints and debug as normal | |||||
| ### Console Logging | |||||
| The application includes minimal console output in production. For development debugging: | |||||
| ```javascript | |||||
| // Development-only logging | |||||
| if (process.env.NODE_ENV !== 'production') { | |||||
| console.log('Debug info:', data); | |||||
| } | |||||
| ``` | |||||
| ### Browser DevTools | |||||
| **Recommended Extensions:** | |||||
| - React Developer Tools (if using React components) | |||||
| - Vue.js devtools (if using Vue components) | |||||
| - Redux DevTools (if using Redux) | |||||
| ## Working with Components | |||||
| ### Creating a New Component | |||||
| 1. **Create component file** in `src/assets/scripts/components/`: | |||||
| ```javascript | |||||
| // src/assets/scripts/components/MyComponent.js | |||||
| class MyComponent { | |||||
| constructor(element) { | |||||
| this.element = element; | |||||
| this.init(); | |||||
| } | |||||
| init() { | |||||
| // Initialize component | |||||
| this.setupEventListeners(); | |||||
| } | |||||
| setupEventListeners() { | |||||
| // Add event listeners | |||||
| } | |||||
| destroy() { | |||||
| // Cleanup | |||||
| } | |||||
| } | |||||
| export default MyComponent; | |||||
| ``` | |||||
| 2. **Import and use** in `app.js`: | |||||
| ```javascript | |||||
| import MyComponent from '@/components/MyComponent'; | |||||
| // Initialize | |||||
| const myComponent = new MyComponent(document.querySelector('.my-component')); | |||||
| ``` | |||||
| 3. **Add component styles** in `src/assets/styles/spec/components/`: | |||||
| ```scss | |||||
| // src/assets/styles/spec/components/myComponent.scss | |||||
| .my-component { | |||||
| // Component styles | |||||
| } | |||||
| ``` | |||||
| 4. **Import styles** in `src/assets/styles/spec/components/index.scss`: | |||||
| ```scss | |||||
| @import 'myComponent'; | |||||
| ``` | |||||
| ### Component Best Practices | |||||
| - Use ES6 classes for components | |||||
| - Keep components focused and single-purpose | |||||
| - Implement `destroy()` method for cleanup | |||||
| - Use webpack aliases (`@/components`, `@/utils`) | |||||
| - Follow existing naming conventions | |||||
| ## Working with Styles | |||||
| ### SCSS Architecture | |||||
| Adminator follows ITCSS (Inverted Triangle CSS) methodology: | |||||
| ``` | |||||
| styles/ | |||||
| ├── settings/ # Variables, config | |||||
| ├── tools/ # Mixins, functions | |||||
| ├── generic/ # Reset, normalize | |||||
| ├── components/ # UI components | |||||
| ├── utils/ # Utility classes | |||||
| └── vendor/ # Third-party styles | |||||
| ``` | |||||
| ### Adding New Styles | |||||
| 1. **Component styles** → `src/assets/styles/spec/components/` | |||||
| 2. **Page-specific styles** → `src/assets/styles/spec/screens/` | |||||
| 3. **Utility classes** → `src/assets/styles/spec/utils/` | |||||
| ### Using CSS Variables | |||||
| Adminator uses CSS custom properties for theming: | |||||
| ```scss | |||||
| .my-component { | |||||
| background: var(--c-bkg-card); | |||||
| color: var(--c-text-base); | |||||
| border: 1px solid var(--c-border); | |||||
| } | |||||
| ``` | |||||
| **Available variables:** See `src/assets/styles/spec/utils/theme.css` | |||||
| ### Dark Mode Support | |||||
| Ensure your components support dark mode: | |||||
| ```scss | |||||
| .my-component { | |||||
| background: var(--c-bkg-card); // Auto-adjusts for dark mode | |||||
| // Or use data attribute | |||||
| [data-theme="dark"] & { | |||||
| background: #1f2937; | |||||
| } | |||||
| } | |||||
| ``` | |||||
| ## Best Practices | |||||
| ### Code Organization | |||||
| - ✅ Keep files small and focused | |||||
| - ✅ Use meaningful file and variable names | |||||
| - ✅ Group related functionality | |||||
| - ✅ Follow existing project structure | |||||
| - ✅ Use webpack aliases for imports | |||||
| ### JavaScript | |||||
| - ✅ Use modern ES6+ features | |||||
| - ✅ Avoid jQuery patterns | |||||
| - ✅ Use vanilla JavaScript DOM APIs | |||||
| - ✅ Implement proper error handling | |||||
| - ✅ Add JSDoc comments for complex functions | |||||
| ### SCSS | |||||
| - ✅ Use variables for colors and spacing | |||||
| - ✅ Follow BEM naming convention (optional) | |||||
| - ✅ Keep selectors shallow (max 3 levels) | |||||
| - ✅ Use mixins for repeated patterns | |||||
| - ✅ Support dark mode with CSS variables | |||||
| ### Performance | |||||
| - ✅ Minimize DOM manipulations | |||||
| - ✅ Use event delegation | |||||
| - ✅ Debounce/throttle frequent events | |||||
| - ✅ Lazy load heavy components | |||||
| - ✅ Optimize images and assets | |||||
| ### Accessibility | |||||
| - ✅ Use semantic HTML | |||||
| - ✅ Add ARIA labels where needed | |||||
| - ✅ Ensure keyboard navigation | |||||
| - ✅ Maintain color contrast ratios | |||||
| - ✅ Test with screen readers | |||||
| ## Common Issues | |||||
| ### Port Already in Use | |||||
| If port 4000 is already in use: | |||||
| ```bash | |||||
| # Kill the process using port 4000 (Windows) | |||||
| netstat -ano | findstr :4000 | |||||
| taskkill /PID <PID> /F | |||||
| # Or change the port in webpack/devServer.js | |||||
| ``` | |||||
| ### Changes Not Reflecting | |||||
| 1. **Hard refresh** the browser (Ctrl+F5) | |||||
| 2. **Clear browser cache** | |||||
| 3. **Restart development server** | |||||
| 4. **Check for JavaScript errors** in console | |||||
| 5. **Verify file is being watched** (check terminal output) | |||||
| ### Build Errors | |||||
| ```bash | |||||
| # Clean and rebuild | |||||
| npm run clean | |||||
| npm install | |||||
| npm start | |||||
| ``` | |||||
| ### Linting Errors | |||||
| ```bash | |||||
| # Auto-fix common issues | |||||
| npx eslint ./src --fix | |||||
| npx stylelint "./src/**/*.scss" --fix | |||||
| # Check remaining issues | |||||
| npm run lint | |||||
| ``` | |||||
| ### Module Not Found | |||||
| ```bash | |||||
| # Reinstall dependencies | |||||
| rm -rf node_modules package-lock.json | |||||
| npm install | |||||
| ``` | |||||
| ## Development Tips | |||||
| ### 1. Use the Webpack Dashboard | |||||
| ```bash | |||||
| npm run dev | |||||
| ``` | |||||
| Provides visual feedback on build performance and bundle size. | |||||
| ### 2. Keep the Console Clean | |||||
| Fix warnings and errors as they appear to maintain code quality. | |||||
| ### 3. Test in Multiple Browsers | |||||
| - Chrome/Edge (Chromium) | |||||
| - Firefox | |||||
| - Safari (if on macOS) | |||||
| - Mobile browsers (responsive mode) | |||||
| ### 4. Use Browser DevTools | |||||
| - **Elements tab** - Inspect and modify DOM/CSS | |||||
| - **Console tab** - Debug JavaScript | |||||
| - **Network tab** - Monitor requests | |||||
| - **Performance tab** - Profile performance | |||||
| - **Application tab** - Check localStorage/theme | |||||
| ### 5. Commit Often | |||||
| Make small, focused commits with clear messages: | |||||
| ```bash | |||||
| git add . | |||||
| git commit -m "feat: add new dashboard widget" | |||||
| git push | |||||
| ``` | |||||
| ## Next Steps | |||||
| Now that you understand the development workflow: | |||||
| 1. **[Customize Themes](../customization/theme-system.md)** - Set up dark mode and theming | |||||
| 2. **[Build for Production](build-deployment.md)** - Deploy your application | |||||
| 3. **[API Reference](../api/theme-api.md)** - JavaScript API documentation | |||||
| 4. **[Project Structure](project-structure.md)** - Review the codebase structure | |||||
| --- | |||||
| **Need Help?** Check the [main README](../../README.md) or [open an issue](https://github.com/puikinsh/Adminator-admin-dashboard/issues). | |||||