# wp-env

> A @wordpress/env (wp-env) egy parancsból felállít egy helyi WordPress-környezetet bővítmény- és témafejlesztéshez: követelmények, telepítés, indítás, .wp-env.json és teszt-környezet.

A `wp-env` a WordPress Block Editor Handbook helyi fejlesztői környezete. Egy meglévő bővítmény- vagy témamappából indítva felállít egy WordPress-oldalt, amelyben a mappád már telepítve és aktiválva van. Kevés beállítást igényel, ezért a bővítményfejlesztők és a Gutenberg-közreműködők használják a legtöbbet.

## Követelmények

- **Docker.** A `wp-env` alapból Dockerrel fut, ezért a parancs kiadása előtt a Dockernek futnia kell.
- **Node.js.** A `wp-env` Node-szkript. A doksi a legfrissebb LTS verziót javasolja, például nvm-mel telepítve.
- **git.** A távoli források (WordPress, bővítmények, témák) letöltéséhez kell.

Van két kísérleti futtatókörnyezet is, amely nem kér Dockert: a `--runtime=playground` (WordPress Playground) és a `--runtime=php` (a gépeden lévő PHP, SQLite adatbázissal). Ezekből néhány funkció hiányzik, például a Playgroundban nincs `wp-env run`, a PHP-s módban pedig nincs multisite és Xdebug.

## Telepítés

Globálisan:

```bash title="Terminál"
npm -g i @wordpress/env
```

Ha a projektnek van `package.json`-ja, projektfüggőségként is felveheted:

```bash title="Terminál"
npm i @wordpress/env --save-dev
```

Ilyenkor a parancsokat `npm exec --no -- wp-env …` formában vagy egy `"wp-env": "wp-env"` npm-szkripten át futtasd. Szkriptnél a kapcsolók elé külön `--` kell: `npm run wp-env start -- --update`.

## Indítás, leállítás, parancsok

Lépj a bővítményed vagy témád mappájába, és indítsd el:

```bash title="Terminál"
cd ~/wp-content/plugins/sajat-bovitmeny
wp-env start
```

Az oldal a `http://localhost:8888` címen él. Belépés: felhasználó `admin`, jelszó `password`. Az adatbázis felhasználója `root`, jelszava `password`.

```bash title="Terminál"
wp-env stop                 # leállítja a környezetet
wp-env start --update       # forrásfrissítés és a beállítások újra alkalmazása
wp-env status               # futási állapot, URL-ek, portok
wp-env reset all            # adatbázisok nullázása (a tartalom elvész)
wp-env destroy              # mindent töröl: konténerek, kötetek, helyi fájlok
```

A `start` alapból nem frissít semmit, csak ha a konfigurációs fájl változott, vagy ha megadod az `--update` kapcsolót.

### Parancs futtatása a környezetben

A `wp-env run <container> <parancs>` a környezet egyik konténerében futtat parancsot. A `cli` konténerben elérhető a WP-CLI, a Composer és a PHPUnit:

```bash title="Terminál"
wp-env run cli wp user list
wp-env run cli wp plugin list
wp-env run cli --env-cwd=wp-content/plugins/sajat-bovitmeny composer install
wp-env run cli bash
```

A parancs alapból a WordPress gyökerében fut. Bővítményen belüli futtatáshoz add meg az `--env-cwd` kapcsolót. Ha a futtatott parancs kapcsolója ütközik a `wp-env`-ével, tedd a kapcsolót `--` után: `wp-env run cli php -- --help`. Részletek a [WP-CLI](https://hub.hellowp.io/hu/knowledge-base/developer-tools/wp-cli/) cikkben.

## A .wp-env.json alapjai

Beállítás nélkül a `wp-env` a legfrissebb éles WordPresst használja, és a mappát bővítményként vagy témaként tölti be. Ha mást szeretnél, tegyél a projekt gyökerébe egy `.wp-env.json` fájlt:

```json title=".wp-env.json"
{
	"$schema": "https://schemas.wp.org/trunk/wp-env.json",
	"core": null,
	"phpVersion": "8.2",
	"plugins": [ ".", "WordPress/classic-editor" ],
	"themes": [ "./teszt-tema" ],
	"port": 4013,
	"config": {
		"WP_DEBUG_LOG": true
	}
}
```

A gyakori mezők:

- **`core`**: a WordPress forrása. `null` esetén a legfrissebb éles kiadás. Megadhatsz GitHub-hivatkozást (például `WordPress/WordPress#5.2.0`), helyi mappát vagy ZIP-fájl URL-jét.
- **`plugins`**: a telepítendő és aktiválandó bővítmények. A `"."` az aktuális mappa.
- **`themes`**: a telepítendő témák.
- **`port`**: a webszerver portja, alapból `8888`. A `WP_ENV_PORT` környezeti változó felülírja.
- **`config`**: `wp-config.php` konstansok. Alapból be van állítva többek között a `WP_DEBUG` és a `SCRIPT_DEBUG` is `true` értékkel. A `null` érték megakadályozza a konstans definiálását.
- **`mappings`**: tetszőleges helyi mappa beillesztése a WordPressbe, például mu-pluginok: `"wp-content/mu-plugins": "./mu-plugins"`. Ami csak itt szerepel, azt a `wp-env` nem aktiválja.
- **`phpVersion`**, **`mariadbVersion`**, **`multisite`**, **`phpmyadmin`**: PHP- és adatbázis-verzió, multisite, phpMyAdmin.

A személyes eltéréseknek való a `.wp-env.override.json`, amit nem commitolsz. A `plugins` és a `themes` nem összefésülődik, hanem teljesen felülíródik, csak a `config` és a `mappings` fésülődik össze.

## Teszt-környezet

A környezet tartalmazza a WordPress PHPUnit-tesztfájljait, a helyüket a `WP_TESTS_DIR` környezeti változó adja meg. Így nem kell külön csomagot telepítened hozzájuk. A teszteket a `cli` konténerben futtathatod:

```bash title="Terminál"
wp-env run cli --env-cwd=wp-content/plugins/sajat-bovitmeny phpunit
```

A külön teszt-környezet régi módja, a `testsEnvironment` mező (alapértelmezett port: `8889`), elavult. A doksi helyette azt javasolja, hogy a tesztekhez használj másik konfigurációs fájlt a `--config` kapcsolóval, más porttal. Így két elkülönített környezet fut egymás mellett:

```bash title="Terminál"
wp-env start
WP_ENV_PORT=8890 wp-env start --config=./.wp-env.test.json
wp-env stop --config=./.wp-env.test.json
```

Minden konfigurációs fájlhoz külön konténerek és adatok tartoznak. A tesztekről lásd még a [PHPUnit](https://hub.hellowp.io/hu/knowledge-base/developer-tools/phpunit/) és a [Playwright](https://hub.hellowp.io/hu/knowledge-base/developer-tools/playwright/) cikket.

## Ha elakad

Először nézd meg, fut-e (`docker ps`), és nem foglalt-e a port (`WP_ENV_PORT` vagy `wp-env start --auto-port`). Aztán próbáld a `wp-env start --update` parancsot, végül a `wp-env reset all` és a `wp-env destroy` jön, amelyek törlik a helyi tartalmat. A generált fájlok a `~/.wp-env` mappában vannak (Linuxon `~/wp-env`).

## Mikor jobb a DDEV vagy a LocalWP

A `wp-env` egyetlen bővítményhez vagy témához készült, és azzal a mappával indul, amiben állsz. Nem teljes oldalmodell: nincs benne például saját tartománynév, HTTPS vagy e-mail-fogadás.

- Ha egy egész projektet futtatnál, a webgyökérrel, Composerrel és adatbázis-importtal, használd a [DDEV](https://hub.hellowp.io/hu/knowledge-base/developer-tools/ddev/)-et. A [Bedrock](https://hub.hellowp.io/hu/knowledge-base/developer-tools/bedrock/) projekteknél ez a természetes választás.
- Ha grafikus felületet szeretnél, és nem akarsz parancssorban dolgozni, a [LocalWP](https://hub.hellowp.io/hu/knowledge-base/developer-tools/localwp/) a kényelmesebb.
- Ha CI-ban vagy a csapatban azonos, a repóban rögzített teszt-környezet kell egy bővítményhez, a `wp-env` a jobb: a `.wp-env.json` a kóddal együtt él.

## Hasznos linkek

- [wp-env a Block Editor Handbookban](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-env/)
- [A csomag README-je a GitHubon](https://github.com/WordPress/gutenberg/tree/trunk/packages/env)
- [@wordpress/env az npm-en](https://www.npmjs.com/package/@wordpress/env)
