lanre/jsrunner

运行JavaScript代码的简单PHP包装器

v0.1.1 2024-02-23 13:53 UTC

README

Latest Version on Packagist Build Status Total Downloads

use Lame\JSRunner\Renderer;
use Lame\JSRunner\V8Engine as V8;

$engine = new V8();

$renderer = new Renderer($engine);

echo $renderer
    ->entry(__DIR__.'/../../public/js/app-server.js')
    ->render();

// <div>My server rendered app!</div>
  • 与任何允许服务器端渲染的JavaScript框架兼容
  • 有或没有V8Js PHP扩展均可运行
  • 需要最小配置 此README假设您已经了解如何构建服务器端渲染的JavaScript应用程序。

此包适用于谁?

  • 希望从PHP无缝调用JavaScript的项目。
  • 双语言(PHP和JS/TS)项目,希望在服务器端渲染其JS/TS。

安装

您可以通过composer安装此包

composer require lanre/jsrunner

用法

引擎

一个引擎在服务器上执行JS脚本。此库包含三个引擎:V8Engine,它包装了一些V8Js调用,因此您需要安装一个PHP扩展来使用此引擎,BunEngineNodeEngine,它们在运行时构建bun/node脚本(分别)并在新进程中执行。一个引擎可以运行一个脚本,也可以运行多个脚本的数组。

V8EngineV8Js类的一个轻量级包装器。您需要安装v8js扩展才能使用此引擎。

BunEngineNodeEngine将必要的脚本写入临时文件,并在适当的环境中执行

。您需要安装node.js(用于NodeEngine)或bun(用于BunEngine)才能使用此引擎。

渲染选项

在渲染应用程序之前,您可以链式调用任意数量的选项来控制如何显示一切。

echo $renderer
    ->enableIf($user->isAuthenticated())
    ->context('user', $user)
    ->entry(__DIR__.'/../../public/js/app-server.js')
    ->render();

enable(): $this

启用服务器端渲染。这是默认状态。

disable(): $this

禁用服务器端渲染。当禁用时,将渲染客户端脚本和回退HTML。

enableIf(bool $enabled = true): $this

条件性地启用服务器端渲染。

debug(bool $debug = true): $this

当启用调试时,JavaScript错误将引发PHP异常。在没有调试模式的情况下,将渲染客户端脚本和回退HTML,以便从干净的起点渲染应用程序。

entry(string $entry): $this

服务器脚本的路径。此脚本的内容将在引擎中运行。

context($context, $value = null): $this

上下文作为context变量传递给服务器脚本。这对于填充应用程序的状态非常有用。上下文可以包含任何可json序列化的内容。

echo $renderer
    ->entry(__DIR__.'/../../public/js/app-server.js')
    ->context('user', ['name' => 'Sebastian'])
    ->render();
// app-server.js

store.user = context.user // { name: 'Sebastian' }

// Render the app...

上下文可以作为键值参数或作为数组传递。

$renderer->context('user', ['name' => 'Sebastian']);
$renderer->context(['user' => ['name' => 'Sebastian']]);

env($env, $value = null): $this

环境变量在执行服务器脚本时放置在process.env中。环境变量必须是数字、字符串或布尔值等原始值。

$renderer->env('NODE_ENV', 'production');
$renderer->env(['NODE_ENV' => 'production']);

fallback(string $fallback): $this

设置服务器端渲染失败或禁用时使用的回退HTML。您可以使用此选项渲染一个容器,以便客户端脚本可以在其中渲染新鲜的应用程序。

$renderer->fallback('<div id="app"></div>');

resolveEntryWith(callable $resolver): $this

添加回调以在解析条目时转换它。这在创建渲染器时非常有用,这样您就不必处理视图中复杂的路径。

echo $renderer
    ->resolveEntryWith(function (string $entry): string {
        return __DIR__."/../../public/js/{$entry}-server.js";
    })
    ->entry('app')
    ->render();

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。