Wp-now — локальное коружение для WordPress

Click here to view original web page at www.kobzarev.com
Обложка к записи Wp-now — локальное коружение для WordPress
Обложка к записи Wp-now — локальное коружение для WordPress

Пакет wp-now упрощает процесс создания локальной среды WordPress.

Он использует автоматическое определение режима, чтобы обеспечить быстрый процесс настройки, независимо от того, работаете ли вы над плагином или целым сайтом. Вы можете легко переключаться между версиями PHP и WordPress с помощью флага конфигурации. Под капотом wp-now работает на базе WordPress Playground и требует только Node.js.

Быстрый запуск

Запуск wp-now в каталоге плагинов или тем

Запустить wp-now очень просто: зайдите в каталог плагинов или тем и выполните следующую команду:

cd my-plugin-or-theme-directory
npx @wp-now/wp-now start

Запуск wp-now в директории wp-content с помощью опций

Вы также можете запустить wp-now из любой папки wp-content. В этом примере вы передаете параметры для изменения версий PHP и WordPress и применения файла Blueprint.

cd my-wordpress-folder/wp-content
npx @wp-now/wp-now start  --wp=6.4 --php=8.0 --blueprint=path/to/blueprint-example.json

Требования

Минимальная поддерживаемая версия Node.js — 18. Для поддержки Blueprint установите Node 20.

Использование

Вам не нужно устанавливать wp-now — вы можете запустить его с помощью одной команды npx. Это рекомендуемый способ использования wp-now, который не требует установки или настройки:

npx @wp-now/wp-now start

Вы также можете установить @wp-now/wp-now глобально, чтобы запускать его из любой директории:

npm install -g @wp-now/wp-now

После установки запустите новый сервер следующим образом:

cd wordpress-plugin-or-theme
wp-now start

Обратите внимание на другой синтаксис. Хотя предшествующий npx @wp-now/ не требуется после локальной установки пакета, без него wp-now <command> выдаст ошибку.

Используйте аргументы --php=<version> и --wp=<version>, чтобы переключаться на разные версии «на лету»:

npx @wp-now/wp-now start --wp=5.9 --php=7.4

В поддерживаемых режимах wp-now создает постоянную базу данных SQLite и каталог wp-content в ~/.wp-now.

Для создания нового проекта используйте аргумент --reset.

Используйте wp-now php <file> для выполнения определенного PHP-файла:

cd wordpress-plugin-or-theme
npx @wp-now/wp-now php my-file.php

Автоматические режимы

wp-now работает в нескольких различных режимах для команд start и php. Выбранный режим зависит от директории, в которой вы выполняете команду:

  • plugin, theme или wp-content: Загружает файлы проекта в виртуальную файловую систему с WordPress и базой данных на основе SQLite. Все (включая основные файлы WordPress, базу данных, wp-config.php и т. д.) хранится в домашней директории пользователя и загружается в виртуальную файловую систему (VFS). wp-now использует последнюю версию WordPress, если вы не зададите аргумент --wp=<version>.

    Вот эвристика для каждого режима:
    • Режим plugin: Наличие PHP-файла с именем «Plugin Name:» в его содержимом.
    • Режим theme: Наличие файла style.css с именем «Theme Name:» в его содержимом.
    • Режим wp-content: Наличие подкаталогов plugins и themes.
  • wordpress: Запускает каталог как установку WordPress при обнаружении файлов WordPress. Если он существует, wp-now будет использовать файл wp-config.php или создаст его с базой данных SQLite.
  • wordpress-develop: То же самое, что и в режиме wordpress, за исключением того, что каталог сборки build является корнем сайта.
  • index: При наличии файла index.php wp-now запускает веб-сервер PHP в рабочей директории и передает запросы в этот файл.
  • playground: Если никакие другие условия не выполняются, wp-now запускает виртуализированный сайт WordPress.

Аргументы

Вы можете запустить wp-now с флагом --help, чтобы получить обзор всех доступных опций.

npx @wp-now/wp-now --help

# или
npx @wp-now/wp-now start --help

# или
npx @wp-now/wp-now php --help

wp-now start поддерживает следующие дополнительные аргументы:

  • --path=: Путь к PHP-файлу или проекту WordPress, который необходимо использовать. Если не указано, будет использоваться текущий рабочий каталог.
  • --php=: Версия PHP для использования. По умолчанию используется версия 8.0.
  • --port=: номер порта, на котором будет прослушиваться сервер. По умолчанию используется порт 8881. Если он используется, wp-now выберет открытый номер порта.
  • --wp=: Версия WordPress, которую следует использовать. По умолчанию используется последняя версия WordPress.
  • --blueprint=<path>: путь к JSON-файлу с шагами Blueprint (требуется Node 20). Если он указан, wp-now выполнит эти шаги. Дополнительные сведения см. в разделе Использование Blueprints.
  • --reset: Создает свежую базу данных SQLite и каталог wp-content для режимов, поддерживающих персистентность.
  • --skip-browser: пропустить открытие браузера после запуска сервера.

wp-now php поддерживает аргументы --path=<path> и --php=<version>.

Технические детали

wp-now хранит все необходимые файлы в скрытом каталоге в домашней директории пользователя: ~/.wp-now.

При работе в режимах plugin, theme, wp-content, и playground файлы ядра WordPress и wp-content будут доступны в ~/.wp-now/wp-content/${projectName}-${directoryHash}. Режим playground использует один и тот же каталог ~/.wp-now/wp-content/playground, независимо от того, где он запущен.

Для настройки базы данных wp-now использует плагин интеграции базы данных SQLite. Путь к базе данных — ~/.wp-now/wp-content/${projectName}-${directoryHash}/database/.ht.sqlite.

Использование Blueprints

Blueprints — это JSON-файлы, определяющие список шагов, которые необходимо выполнить после запуска wp-now. Blueprints автоматизируют настройку сайта WordPress, включая определение констант wp-config.php, установку плагинов и тем, а также создание контента.

Ниже приведен пример Blueprints, который запускает последние версии WordPress и PHP, устанавливает необходимые расширения PHP, регистрирует пользователя в качестве администратора и открывает экран создания новой записи.

{
	"$schema": "https://playground.wordpress.net/blueprint-schema.json",
	"landingPage": "/wp-admin/post-new.php",
	"preferredVersions": {
		"php": "latest",
		"wp": "latest"
	},
	"phpExtensionBundles": ["kitchen-sink"],
	"steps": [
		{
			"step": "login",
			"username": "admin",
			"password": "password"
		}
	]
}

Вы можете создавать прототипы и тестировать свои Blueprints в специальном онлайн-редакторе.

Чтобы запустить его, создайте файл с именем blueprint-example.json и выполните следующую команду:

npx @wp-now/wp-now start --blueprint=path/to/blueprint-example.json

Определение пользовательских URL-адресов в Blueprints

Будучи строительными блоками Playground, Blueprints обладают расширенной функциональностью, и мы рекомендуем вам узнать больше о том, как их использовать, прежде чем приступать к работе.

Вот пример Blueprint, который определяет пользовательскую константу URL в wp-config.php с помощью WP_HOME и WP_SITEURL.

Если предположить, что вы добавили myurl.wpnow в файл hosts, ваш сайт будет доступен по адресу http://myurl.wpnow.

Обратите внимание, что method установлен на define-before-run, чтобы избежать модификации общего файла wp-config.php. Метод по умолчанию, rewrite-wp-config, изменяет файл wp-config.php на диске.

{
	"steps": [
		{
			"step": "defineWpConfigConsts",
			"consts": {
				"WP_HOME": "http://myurl.wpnow:8881",
				"WP_SITEURL": "http://myurl.wpnow:8881"
			},
			"method": "define-before-run"
		}
	]
}

Вы можете использовать этот экземпляр с помощью ngrok:

  • Запустите ngrok http 8881
  • Скопируйте URL-адрес и
  • Замените WP_HOME и WP_SITEURL в файле Blueprint.

Вы также можете задать другой порт:

npx @wp-now/wp-now start --blueprint=path/to/blueprint-example.json --port=80

Blueprint для прослушивания порта 80 будет выглядеть следующим образом:

{
	"steps": [
		{
			"step": "defineWpConfigConsts",
			"consts": {
				"WP_HOME": "http://myurl.wpnow",
				"WP_SITEURL": "http://myurl.wpnow"
			},
			"method": "define-before-run"
		}
	]
}

Определение отладочных констант в Blueprint

Аналогичным образом вы можете определить константы WP_DEBUG и просмотреть журналы отладки.

Вот пример Blueprint:

{
	"steps": [
		{
			"step": "defineWpConfigConsts",
			"consts": {
				"WP_DEBUG": true
			}
		}
	]
}

Поскольку вы не определили метод для defineWpConfigConsts, Blueprint использует стандартную команду rewrite-wp-config и обновляет файл, хранящийся в ~/.wp-now/wordpress-versions/latest/wp-config.php. В следующий раз, когда вы выполните wp-now start в любом проекте, переменная WP_DEBUG будет установлена в true.

Если вы откроете wp-config.php, то увидите следующие строки:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );

Вы можете найти файл debug.log в директории ~/.wp-now/wp-content/${projectName}/.

Установка пользовательского пути для файла debug.log

Сервер php-wasm работает под VFS, где по умолчанию documentRoot для wp-now всегда /var/www/html. Таким образом, Blueprint, запущенный из темы с именем atlas, будет выглядеть следующим образом:

{
	"steps": [
		{
			"step": "defineWpConfigConsts",
			"consts": {
				"WP_DEBUG": true,
				"WP_DEBUG_LOG": "/var/www/html/wp-content/themes/atlas/example.log"
			},
			"method": "define-before-run"
		}
	]
}

Вы можете найти файл example.log в каталоге вашего проекта.

Известные проблемы

  • Запуск wp-now start в режиме wp-content или wordpress приводит к созданию пустых каталогов.
  • Может показаться, что пакет wp-now NPM имеет случайный номер версии.

Сравнения

Laravel Valet

Вот что вам нужно знать, если вы переходите с Laravel Valet:

  • wp-now выполняет всю установку WordPress за вас. Просто выполните команду wp-now start.
  • wp-now работает на всех настольных платформах (Mac, Linux, Windows).
  • wp-now не устанавливает для вас пользовательские домены.
  • wp-now работает с темами и плагинами WordPress, даже если у вас не установлен WordPress.
  • wp-now позволяет переключать версию WordPress с помощью команды wp-now start --wp=<vesrion>.

wp-env

Вот что вам нужно знать, если вы переходите с wp-env:

  • wp-now поддерживает проекты, не относящиеся к WordPress.
  • wp-now не требует Docker.
  • wp-now не включает скрипты жизненного цикла.

Ваш вклад

Мы приветствуем вклад сообщества!

Вклад в код

Склонируйте репозиторий, установите зависимости, соберите проект и запустите wp-now в режиме предварительного просмотра:

git clone git@github.com:WordPress/playground-tools.git
cd playground-tools
npm install
npm run build
npx nx preview wp-now start

Добавление аргумента --path=<path> к команде выше — удобный способ протестировать wp-now в разных режимах.

Чтобы запустить модульные тесты, выполните следующую команду:

npx nx test wp-now

Ссылки

Development npm npx Playground WordPress wp-now