chenos / execjs
此包的最新版本(v0.1.0)没有可用的许可证信息。
v0.1.0
2018-02-05 03:53 UTC
Requires
- chenos/v8js-module-loader: ^0.2.0
Requires (Dev)
- kint-php/kint: ^2.2
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^6.5
This package is not auto-updated.
Last update: 2024-09-29 05:27:42 UTC
README
需求
- PHP 7.0+
- V8Js 扩展 2.0+
安装
composer require chenos/execjs
测试
make test
示例
make example
使用方法
use Chenos\ExecJs\Context; use Chenos\V8JsModuleLoader\ModuleLoader; $context = new Context('PHP'); $context->getLoader() ->setEntryDir(__DIR__) ->addVendorDir(__DIR__.'/node_modules') ->addOverride('vue', 'vue/dist/vue.runtime.common.js') ; // or $loader = new ModuleLoader(); $loader->setEntryDir(__DIR__) ->addVendorDir(__DIR__.'/node_modules') ->addOverride('vue', 'vue/dist/vue.runtime.common.js') ; $context->setLoader($loader); $context->eval(string $script); $context->load(string $module); $context->require($module, string|array $identifier); $context->set(string $key, mixed $value, $global = false);
API
eval
评估表示为字符串的JavaScript代码。
public mixed function eval(string $script, int $flags = V8Js::FLAG_NONE, int $timeLimit = 0, int $memoryLimit = 0)
几乎与V8Js::executeString
相同,除了$identifier
参数。
public mixed function V8Js::executeString(string $script, string $identifier = '', int $flags = V8Js::FLAG_NONE, int $timeLimit = 0, int $memoryLimit = 0)
使用方法
$context->eval('1+1'); // 2
load
评估从文件表示的JavaScript代码。
public mixed function load(string $module, int $flags = V8Js::FLAG_NONE, int $timeLimit = 0, int $memoryLimit = 0)
$context->load('./foo.js'); // equals $str = $context->getLoader()->loadModule('./foo.js'); $context->eval($str);
require
支持CommonJS模块以require外部代码。
public mixed function require(string $module, string|array $identifier = null)
使用方法
$yaml = $context->require('js-yaml'); $yaml->load('a: b'); // ['a' => 'b']
字符串标识符
$yaml = $context->require('js-yaml', 'jsyaml'); // equals $context->eval("var jsyaml = require('js-yaml'); jsyaml;"); // usage $yaml->load('a: b'); // ['a' => 'b'] $context->eval(sprintf('jsyaml.dump(%s)', json_encode(['a' => 'b']))); // 'a: b'
数组标识符
$context->require('js-yaml', ['load', 'dump']); // equals $context->eval("var {load, dump} = require('js-yaml').load;"); $context->eval("load('a: b')"); // ['a' => 'b'] $context->eval(sprintf('dump(%s)', json_encode(['a' => 'b']))); // 'a: b' $context->require('js-yaml', ['load' => 'yamlLoad']); // equals $context->eval("var yamlLoad = require('js-yaml').load;"); // es6: import {load as yamlLoad} from 'js-yaml' $context->eval("yamlLoad('a: b')"); // ['a' => 'b']
set
分配属性以便使其可访问javascript上下文。
public Context function set(string $key, mixed $value, $global = false)
使用方法
$context->set('foo', 'bar'); $context->eval('PHP.foo'); // bar $context->eval('foo'); // error undefined $context->set('bar', 'baz', true); $context->eval('PHP.bar'); // baz $context->eval('bar'); // baz $context->set('process', [ 'env' => [ 'NODE_ENV' => 'production', ], ], true); $context->eval('process.env.NODE_ENV'); // production
全局变量
- exit
V8Function
- PHP
V8Js
- print
V8Function
- require
V8Function
- sleep
V8Function
- var_dump
V8Function