293 lines
5.8 KiB
Markdown
293 lines
5.8 KiB
Markdown
# Validierungstools für EspoCRM Custom-Entwicklung
|
|
|
|
## Installierte Tools
|
|
|
|
### 1. PHP-CLI (v8.2.29)
|
|
**Zweck:** Validierung von PHP-Syntax
|
|
|
|
**Installation:**
|
|
```bash
|
|
sudo apt install -y php-cli
|
|
```
|
|
|
|
**Verwendung im Script:**
|
|
```bash
|
|
php -l /pfad/zur/datei.php
|
|
```
|
|
|
|
**Validiert:**
|
|
- PHP-Syntax-Fehler
|
|
- Parse-Fehler
|
|
- Fehlende Klammern/Semikolons
|
|
- Ungültige Funktionsdeklarationen
|
|
|
|
---
|
|
|
|
### 2. CSSLint (v1.0.4)
|
|
**Zweck:** CSS-Validierung und Best-Practice-Checks
|
|
|
|
**Installation:**
|
|
```bash
|
|
sudo apt install -y nodejs npm
|
|
sudo npm install -g csslint
|
|
```
|
|
|
|
**Verwendung im Script:**
|
|
```bash
|
|
csslint --format=compact --quiet /pfad/zur/datei.css
|
|
```
|
|
|
|
**Validiert:**
|
|
- CSS-Syntax-Fehler
|
|
- Ungültige Properties
|
|
- Vendor-Prefix-Probleme
|
|
- Performance-Probleme
|
|
- Kompatibilitätsprobleme
|
|
|
|
**Konfiguration:**
|
|
Das Script verwendet standardmäßig alle csslint-Regeln. Für custom Rules kann eine `.csslintrc` Datei erstellt werden.
|
|
|
|
---
|
|
|
|
### 3. JSHint (v2.13.6)
|
|
**Zweck:** JavaScript-Code-Qualität und Syntax-Validierung
|
|
|
|
**Installation:**
|
|
```bash
|
|
sudo npm install -g jshint
|
|
```
|
|
|
|
**Verwendung im Script:**
|
|
```bash
|
|
jshint --config=/dev/null /pfad/zur/datei.js
|
|
```
|
|
|
|
**Validiert:**
|
|
- JavaScript-Syntax-Fehler
|
|
- Potenzielle Bugs
|
|
- Code-Style-Probleme
|
|
- Ungültige Variablen-Deklarationen
|
|
- Scope-Probleme
|
|
|
|
**Konfiguration:**
|
|
Aktuell nutzt das Script minimale Konfiguration. Für erweiterte Checks kann eine `.jshintrc` Datei erstellt werden:
|
|
|
|
```json
|
|
{
|
|
"esversion": 6,
|
|
"browser": true,
|
|
"jquery": true,
|
|
"unused": true,
|
|
"undef": true
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Integration im Validierungsscript
|
|
|
|
Das Script `custom/scripts/validate_and_rebuild.py` nutzt diese Tools automatisch:
|
|
|
|
### Automatische Erkennung
|
|
```python
|
|
# Prüft ob Tool verfügbar ist
|
|
try:
|
|
subprocess.run(['csslint', '--version'], capture_output=True)
|
|
use_csslint = True
|
|
except FileNotFoundError:
|
|
use_csslint = False
|
|
# Fallback auf Basis-Validierung
|
|
```
|
|
|
|
### Fallback-Mechanismus
|
|
Falls ein Tool nicht verfügbar ist, verwendet das Script eine Basis-Validierung:
|
|
|
|
- **CSS:** Klammer-Matching, Attribut-Selektoren
|
|
- **JavaScript:** Klammer-Matching (rund, eckig, geschweift)
|
|
- **PHP:** Übersprungen mit Warnung
|
|
|
|
---
|
|
|
|
## Validierungsebenen
|
|
|
|
### Kritische Fehler (Rebuild wird abgebrochen)
|
|
- JSON-Syntax-Fehler
|
|
- PHP-Syntax-Fehler
|
|
- CSS-Syntax-Fehler (schwerwiegend)
|
|
- JavaScript-Syntax-Fehler
|
|
- Fehlende Relationship-Definitionen
|
|
|
|
### Warnungen (Rebuild wird fortgesetzt)
|
|
- CSS-Best-Practice-Verletzungen
|
|
- Fehlende i18n-Übersetzungen
|
|
- Code-Style-Probleme
|
|
- Performance-Hinweise
|
|
|
|
---
|
|
|
|
## Manuelle Verwendung der Tools
|
|
|
|
### CSS prüfen
|
|
```bash
|
|
# Einzelne Datei
|
|
csslint client/custom/css/my-styles.css
|
|
|
|
# Alle CSS-Dateien
|
|
find client/custom/css -name "*.css" -exec csslint {} \;
|
|
|
|
# Mit spezifischen Regeln
|
|
csslint --errors=errors,duplicate-properties client/custom/css/
|
|
```
|
|
|
|
### JavaScript prüfen
|
|
```bash
|
|
# Einzelne Datei
|
|
jshint client/custom/src/views/my-view.js
|
|
|
|
# Alle JS-Dateien
|
|
find client/custom/src -name "*.js" -exec jshint {} \;
|
|
|
|
# Mit Konfiguration
|
|
jshint --config .jshintrc client/custom/src/
|
|
```
|
|
|
|
### PHP prüfen
|
|
```bash
|
|
# Einzelne Datei
|
|
php -l custom/Espo/Custom/Classes/MyClass.php
|
|
|
|
# Alle PHP-Dateien
|
|
find custom/Espo -name "*.php" -exec php -l {} \; | grep -v "No syntax errors"
|
|
```
|
|
|
|
---
|
|
|
|
## Zusätzliche empfohlene Tools (optional)
|
|
|
|
### 1. ESLint (moderne Alternative zu JSHint)
|
|
```bash
|
|
sudo npm install -g eslint
|
|
eslint --init # Erstellt .eslintrc Konfiguration
|
|
```
|
|
|
|
### 2. Stylelint (moderne Alternative zu CSSLint)
|
|
```bash
|
|
sudo npm install -g stylelint stylelint-config-standard
|
|
# Benötigt .stylelintrc Konfiguration
|
|
```
|
|
|
|
### 3. PHPStan (statische PHP-Analyse)
|
|
```bash
|
|
composer require --dev phpstan/phpstan
|
|
vendor/bin/phpstan analyse custom/Espo
|
|
```
|
|
|
|
### 4. PHP_CodeSniffer (PHP Code-Style)
|
|
```bash
|
|
sudo apt install -y php-codesniffer
|
|
phpcs --standard=PSR12 custom/Espo/
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Tool nicht gefunden
|
|
```bash
|
|
# Prüfe Installation
|
|
which csslint
|
|
which jshint
|
|
which php
|
|
|
|
# Installiere fehlende Tools
|
|
sudo apt update
|
|
sudo apt install -y nodejs npm php-cli
|
|
sudo npm install -g csslint jshint
|
|
```
|
|
|
|
### Validierung zu streng
|
|
Bearbeite das Script und passe die Tool-Parameter an:
|
|
```python
|
|
# Weniger strikte CSS-Validierung
|
|
result = subprocess.run(
|
|
['csslint', '--format=compact', '--errors=errors', str(css_file)],
|
|
...
|
|
)
|
|
```
|
|
|
|
### Performance-Probleme
|
|
Für große Projekte mit vielen Dateien:
|
|
```python
|
|
# Parallele Validierung mit ThreadPoolExecutor
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
with ThreadPoolExecutor(max_workers=4) as executor:
|
|
results = executor.map(validate_css_file, css_files)
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Vor jedem Commit:** Führe Validierung aus
|
|
```bash
|
|
python3 custom/scripts/validate_and_rebuild.py --dry-run
|
|
```
|
|
|
|
2. **Automatisierung:** Integriere in Git pre-commit hook
|
|
```bash
|
|
# .git/hooks/pre-commit
|
|
#!/bin/bash
|
|
python3 custom/scripts/validate_and_rebuild.py --dry-run
|
|
if [ $? -ne 0 ]; then
|
|
echo "Validierung fehlgeschlagen. Commit abgebrochen."
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
3. **CI/CD Integration:** Nutze in Build-Pipeline
|
|
```yaml
|
|
# .gitlab-ci.yml / .github/workflows/
|
|
validate:
|
|
script:
|
|
- python3 custom/scripts/validate_and_rebuild.py --dry-run
|
|
```
|
|
|
|
4. **IDE Integration:** Konfiguriere Editor für Live-Feedback
|
|
- VSCode: ESLint/Stylelint Extensions
|
|
- PHPStorm: Built-in PHP/JS/CSS Validierung
|
|
|
|
---
|
|
|
|
## Maintenance
|
|
|
|
### Updates der Tools
|
|
```bash
|
|
# System-Packages
|
|
sudo apt update && sudo apt upgrade
|
|
|
|
# NPM-Packages
|
|
sudo npm update -g csslint jshint
|
|
|
|
# Prüfe Versionen
|
|
php --version
|
|
csslint --version
|
|
jshint --version
|
|
```
|
|
|
|
### Entfernung
|
|
```bash
|
|
# NPM-Tools
|
|
sudo npm uninstall -g csslint jshint
|
|
|
|
# APT-Packages
|
|
sudo apt remove php-cli nodejs npm
|
|
sudo apt autoremove
|
|
```
|
|
|
|
---
|
|
|
|
**Letzte Aktualisierung:** Januar 2026
|
|
**Maintainer:** Custom Scripts Team
|
|
**Dokumentation:** `custom/scripts/VALIDATION_TOOLS.md`
|