Aller au contenu principal

Paquets PHP.wasm

Les paquets npm PHP.wasm séparent l'API JavaScript partagée, la configuration spécifique à chaque plateforme et les binaires PHP compilés. La plupart des applications devraient utiliser un adaptateur de plateforme. Les applications qui privilégient une installation plus légère peuvent, à la place, charger un paquet spécifique à une version via l'API de bas niveau.

Couches de paquets

PaquetResponsabilité
@php-wasm/universalFournit la classe PHP indépendante de l'environnement, loadPHPRuntime() et les API partagées de requêtes et de système de fichiers. Il ne sélectionne pas de build Node.js ou navigateur.
@php-wasm/nodeFournit loadNodeRuntime(version) et la configuration de l'environnement d'exécution spécifique à Node.js, y compris le réseau, le verrouillage de fichiers et les utilitaires de système de fichiers.
@php-wasm/webFournit loadWebRuntime(version) ainsi que l'environnement d'exécution, le réseau, le stockage et les utilitaires de workers spécifiques au navigateur.
@php-wasm/node-X-Y et @php-wasm/web-X-YContiennent les binaires WebAssembly et les chargeurs pour une version mineure de PHP, ainsi que les artefacts d'extensions correspondant à cette version lorsqu'ils sont disponibles.

Une application crée l'objet PHP à partir de @php-wasm/universal. L'adaptateur Node.js ou web configure l'environnement, sélectionne une version de PHP et importe le paquet correspondant à cette version. Par exemple, loadNodeRuntime('8.4') sélectionne @php-wasm/node-8-4.

L'API utilise des versions avec un point, comme 8.4, tandis que les noms des paquets npm utilisent un suffixe avec un tiret, comme 8-4.

Chargeurs de plateforme pratiques

Utilisez un adaptateur de plateforme lorsque vous avez besoin de ses intégrations avec l'environnement d'exécution ou que vous pouvez sélectionner différentes versions de PHP à l'exécution. Pour Node.js :

npm install @php-wasm/universal @php-wasm/node
import { PHP } from '@php-wasm/universal';
import { loadNodeRuntime } from '@php-wasm/node';

const php = new PHP(await loadNodeRuntime('8.4'));

Dans un navigateur, utilisez plutôt @php-wasm/web et loadWebRuntime('8.4').

Les adaptateurs de plateforme peuvent sélectionner n'importe quelle version de PHP prise en charge, et leur graphe de dépendances publié inclut les paquets de versions correspondants. C'est pratique, mais ce n'est pas l'installation la plus légère lorsqu'une application n'a besoin que d'une seule version de PHP.

Charger directement une version de PHP

Pour obtenir l'empreinte de dépendances la plus réduite, omettez l'adaptateur de plateforme et installez @php-wasm/universal avec un seul paquet spécifique à une version :

npm install @php-wasm/universal @php-wasm/node-8-4

Ces paquets sont publiés ensemble. Maintenez leurs versions de publication npm alignées.

Chargez ensuite son module compilé via l'API de bas niveau :

import { PHP, loadPHPRuntime } from '@php-wasm/universal';
import { getPHPLoaderModule } from '@php-wasm/node-8-4';

const loaderModule = await getPHPLoaderModule();
const runtimeId = await loadPHPRuntime(loaderModule);
const php = new PHP(runtimeId);

const response = await php.runStream({
code: '<?php echo "Hello from PHP " . PHP_VERSION;',
});
console.log(await response.stdoutText);

Pour une build navigateur, utilisez le paquet correspondant, comme @php-wasm/web-8-4, avec le même flux getPHPLoaderModule() et loadPHPRuntime(). Configurez le bundler du navigateur pour émettre en tant que ressources les fichiers .wasm et .so importés, comme décrit dans le guide des bundlers de @php-wasm/web. Adaptez les références de paquets de cette configuration au nom spécifique à la version ; par exemple, excluez @php-wasm/web-8-4 au lieu de @php-wasm/web.

Ici, une empreinte plus réduite signifie installer une seule version mineure de PHP au lieu de toute la matrice prise en charge. Chaque paquet de version inclut toujours les variantes compilées et les artefacts correspondants requis pour cette version de PHP.

Cette approche directe est volontairement de plus bas niveau. Elle contourne la configuration effectuée par loadNodeRuntime() ou loadWebRuntime(), y compris le réseau de la plateforme, le verrouillage de fichiers de Node.js, le chargement des extensions et les autres intégrations spécifiques à l'environnement. Utilisez-la lorsque l'API partagée PHP et le système de fichiers en mémoire suffisent, ou lorsque votre application fournit elle-même la configuration Emscripten requise.

Consultez les versions de PHP prises en charge pour choisir le suffixe de paquet correspondant.

Quelle approche choisir ?

  • Utilisez @php-wasm/node ou @php-wasm/web pour bénéficier de la configuration de l'environnement d'exécution et des utilitaires spécifiques à la plateforme, ainsi que de l'API la plus simple pour sélectionner les versions.
  • Chargez @php-wasm/node-X-Y ou @php-wasm/web-X-Y directement lorsque la taille de l'installation compte davantage que les avantages de l'adaptateur de plateforme.