lanre / jsrunner
运行JavaScript代码的简单PHP包装器
Requires
- php: ^8.1
- symfony/process: ^7.0
Requires (Dev)
- pestphp/pest: ^3.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2024-09-21 07:32:06 UTC
README
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扩展来使用此引擎,BunEngine
和NodeEngine
,它们在运行时构建bun/node脚本(分别)并在新进程中执行。一个引擎可以运行一个脚本,也可以运行多个脚本的数组。
V8Engine
是V8Js
类的一个轻量级包装器。您需要安装v8js扩展才能使用此引擎。
BunEngine
和NodeEngine
将必要的脚本写入临时文件,并在适当的环境中执行
。您需要安装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
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
鸣谢
- Lanre Waju 为创建此包做出的贡献
- Sebastian De Deyne,他为spatie/server-side-rendering做出的贡献,本包基于此
- 所有贡献者
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。