# Entwicklungsumgebung

> Einrichtung einer lokalen Entwicklungsumgebung

---

Was man zum Bauen und Testen des Moduls lokal braucht.

## Voraussetzungen

| Komponente | Version | Hinweise |
| --- | --- | --- |
| PHP | 8.3+ | dieselbe Version, mit der die webtrees-Instanz läuft |
| Composer | 2.x | installiert `wt-shared-libs` + `phpstan` |
| Node.js | 18+ (LTS) | für Gulp / Rollup / Mocha |
| webtrees | 2.2.x oder 2.3.x | nötig für PHPStan (`app/`-Klassen) und die Smoke-Tests |
| [wt-shared-libs](../../wt-shared-libs) | neueste Version | Schwester-Repo unter `modules_v4/wt-shared-libs` (Composer-Path-Repo) |

## Lage

Das Modul liegt innerhalb einer webtrees-Installation unter `modules_v4/linkenhancer/`. Sein <a href="https://codeberg.org/bschwede/linkenhancer/src/branch/main/composer.json" target="_blank" rel="noopener"><code>composer.json</code></a>
 zieht die Schwester-Bibliothek als lokales Path-Repository ein:

```json
"repositories": [
    { "type": "path", "url": "../wt-shared-libs", "options": { "symlink": false } }
]
```

## Einrichtung

```bash
# PHP-Abhängigkeiten (installiert wt-shared-libs + phpstan)
composer install

# JS-Abhängigkeiten (gulp, rollup, mocha, …)
npm ci
```

> **Hinweis:** <a href="https://codeberg.org/bschwede/linkenhancer/src/branch/main/composer.json" target="_blank" rel="noopener"><code>composer.json</code></a>
 setzt `prepend-autoloader: false` — der Autoloader des Moduls wird an den Autoloader von webtrees angehängt (nicht ersetzt).

## Bind-Mount

Im aktuellen Setup wird auf Linux mit nativ installiertem Apache Webserver entwickelt. Der Quellbaum der PHP-Laufzeit wird über einen Bind-Mount der Repo-Ordner unterhalb von `modules_v4` bereitgestellt. Die CLI-Tools und PHPStan müssen vom **Mount-Pfad** aus ausgeführt werden (den Pfad, den die webtrees-Instanz sieht), nicht vom Quellpfad, damit `app/` und `vendor/autoload.php` richtig auflösen:

```bash
cd /path/to/webtrees/modules_v4/linkenhancer
composer analyse
```

Die genauen Befehle stehen auf den Seiten [CLI-Skripte](./cli-scripts) und [PHPStan](./phpstan).
