1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bplok20010-eval5

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

eval5

Китайский | Английский

GitHub license npm npm bundle size

Основанный на TypeScript интерпретатор JavaScript, поддерживающий полный синтаксис ES5.

Поддерживает браузеры, Node.js, мини-программы и другие среды выполнения JavaScript.

Онлайн-демонстрация

Дополнительные примеры

Сценарии использования

  • В браузере требуется использовать песочницу для выполнения JavaScript-скриптов.
  • Необходимо контролировать время выполнения.
  • Требуется интерпретатор для сред выполнения JavaScript, которые не поддерживают eval или Function: например, для мини-программ WeChat, We-Script и Taro-Script.
  • Для исследовательских или учебных целей.

Поддерживаемые версии ECMAScript

ES5

Установка

npm install --save eval5

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

Edit eval5

import { Interpreter } from "eval5";

const interpreter = new Interpreter(window, {
    timeout: 1000,
});

let result;

try {
    result = interpreter.evaluate("1+1");
    console.log(result);

    interpreter.evaluate("var a=100");
    interpreter.evaluate("var b=200");
    result = interpreter.evaluate("a+b");

    console.log(result);
} catch (e) {
    console.log(e);
}

Параметры

interface Options {
    // По умолчанию: 0, без ограничения
    timeout?: number;
    // Корневая область видимости, только для чтения
    rootContext?: {} | null;
    globalContextInFunction?: any;
}

Пример:

import { Interpreter } from "eval5";

const ctx = {};
const interpreter = new Interpreter(ctx, {
    rootContext: window,
    timeout: 1000,
});

interpreter.evaluate(`
    a = 100;
    console.log(a); // 100
`);

window.a;//undefined

Интерпретатор

version

Текущая версия.

global

По умолчанию: {}.

Устанавливает глобальную область по умолчанию.

Interpreter.global = window;
const interpreter = new Interpreter();
interpreter.evaluate('alert("hello eval5")');

globalContextInFunction

По умолчанию: undefined.

eval5 не поддерживает строгий режим use strict, в нестрогом режиме функции по умолчанию имеют контекст this, указывающий на глобальный объект, но в eval5 это undefined, поэтому можно установить контекст по умолчанию с помощью globalContextInFunction.

import { Interpreter } from "Interpreter";

const ctx = {};
const interpreter = new Interpreter(ctx);
interpreter.evaluate(`
this; // ctx
function func(){
    return this; // undefined
}
func();
`);
import { Interpreter } from "Interpreter";

Interpreter.globalContextInFunction = window;
const ctx = {};
const interpreter = new Interpreter({});
interpreter.evaluate(`
this; // ctx
function func(){
    return this; // window
}
func();
`);

Причина: пример кода:

Примечание: предупреждение об ошибке

import { Interpreter } from "Interpreter";

Interpreter.globalContextInFunction = {};

const ctx = {alert: alert};

const interpreter = new Interpreter(ctx);

interpreter.evaluate(`
// throw Illegal invocation
alert('Hello eval5'); // аналогично alert.call({}, 'Hello eval5')
`);

constructor(context = Interpreter.global, options?: Options )

Конструктор.

Методы экземпляра интерпретатора

evaluate(code: string): any

Выполняет заданную строку кода и возвращает значение последнего выражения.

import { Interpreter } from "Interpreter";

const interpreter = new Interpreter(window);

const result = interpreter.evaluate(`
var a = 100;
var b = 200;

a+b;

`);

console.log(result); // 300

appendCode(code: string): any

Псевдоним для evaluate.

getExecutionTime(): number

Получает время выполнения последнего вызова evaluate.

setExecTimeout(timeout: number = 0): void

Устанавливает время выполнения.

getOptions(): Readonly<Options>

Получает параметры интерпретатора.


evaluate(code: string, ctx?: {}, options?: Options)

Выполняет данную строку кода и возвращает значение последнего выражения.

Примечание: каждый вызов этой функции создаёт новый интерпретатор.

import { evaluate } from "eval5";

evaluate(
    `
var a = 100;
var b = 100;
console.log(a+b);
`,
    { console: console }
); // 200

evaluate(`
    a;
`); // a is not defined

Функция

Эта функция использует Interpreter.global и Interpreter.globalContextInFunction в качестве значений по умолчанию и создаёт новый интерпретатор. ``` console.log(func(100, 200)); // 300


## vm

Просмотреть [vm](https://nodejs.org/dist/latest-v13.x/docs/api/vm.html)

-   vm.createContext
-   vm.compileFunction
-   vm.runInContext
-   vm.runInNewContext
-   vm.Script

## License

MIT

## 相关

-   [evaljs](https://github.com/marten-de-vries/evaljs)
-   [closure-interpreter](https://github.com/int3/closure-interpreter)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Интерпретатор JavaScript, написанный на TypeScript, поддерживает полную синтаксическую структуру ES5. Развернуть Свернуть
MIT
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/bplok20010-eval5.git
git@api.gitlife.ru:oschina-mirror/bplok20010-eval5.git
oschina-mirror
bplok20010-eval5
bplok20010-eval5
master