介绍
@fsandbox/fsandbox
是一个可以在前端浏览器环境下使用的沙盒运行时。它允许你运行 JavaScript 代码并且在沙盒环境中执行,防止你的代码对于其他全局变量、函数名、浏览器 API 等造成影响。
@fsandbox/fsandbox
同时支持 ECMAScript 和 TypeScript 代码。它的底层实现基于 vm2。
安装
你可以直接使用 npm 进行安装:
npm install @fsandbox/fsandbox --save
使用
要在你的代码中使用 @fsandbox/fsandbox
,你可以通过如下方式引入它:
import { fSandbox } from '@fsandbox/fsandbox';
运行代码
你可以使用 fSandbox
来运行你的 JavaScript 代码。代码可以是 ECMAScript 或 TypeScript。
const code = ` const add = (a, b) => a + b; console.log(add(1, 2)); `; const result = fSandbox.run(code); // 输出:3
注入全局变量
当你需要向沙盒环境中注入全局变量时,你可以使用 globalVariables
参数:
-- -------------------- ---- ------- ----- ---- - - ------------------ -- ----- ---- - - ---------------- - ----- ----- ------- -- -- ------------------ ------ -- ------- -----
配置选项
你可以使用一些配置选项来指定沙盒的行为:
-- -------------------- ---- ------- ----- ---- - - ------------------ ---- -- ----- ---- - - ---------------- - ---- --- -- -- - - -- -- -------- ----- -- -------- - -- ------------- -------- -- -- ---------- ----- -- ------------------ ------ -- ----
timeout
你可以通过 timeout
选项来指定代码的最长执行时间,以毫秒为单位。如果代码的执行时间超过了这个时间,那么运行时将会终止代码的执行。
-- -------------------- ---- ------- ----- ---- - - --- - - -- ----- ------ - ---- - -- ----- ---- - - -------- ---- -- ------ --- -- -- --- - ------------------ ------ - ----- --- - ------------------------- -- --------- --------- ----- --- ----- ----- -
compilerMode
你可以通过 compilerMode
选项来指定编译模式。目前支持两种编译模式:
strict
- 使用 ECMAScript 的严格模式loose
- 使用 ECMAScript 的非严格模式
-- -------------------- ---- ------- ----- ---- - - -------- ----- - ------ ----- - -- ------- - ---------------- -- ------- - -- ----- ---- - - ------------- -------- -- ------------------ ------ -- ------ -- ----
TypeScript 支持
@fsandbox/fsandbox
同时支持 TypeScript 代码。你只需要在配置选项中加入 filename
和 compilerOptions
就可以开始使用 TypeScript 了。
-- -------------------- ---- ------- ----- ---- - - -------- ------ ------- -- -------- ------ - ------ - - -- - ------------------ ---- -- ----- ---- - - ---------------- - ------- ------ ------- ----------- ----------------- ------- ---- -------- ---------- ------ -- --------- ------------- -- ------------------ ------ -- ----
返回值
fSandbox.run
返回一个对象,它代表了代码的执行结果。这个对象可能包含以下字段:
stdout
- 代码输出的字符串result
- 如果代码有返回值,则包含在这个字段中exception
- 如果代码抛出了异常,则包含在这个字段中timeout
- 如果代码因为超时而停止执行,则为 true
const code = ` console.log('hello world'); return 42; `; const result = fSandbox.run(code); // 输出:{ stdout: 'hello world\n', result: 42 }
总结
@fsandbox/fsandbox
提供了前端 JavaScript 运行时的沙盒环境,使你可以在安全的环境下运行代码。它支持 ECMAScript 和 TypeScript 代码,并提供了一些配置选项来控制沙盒行为。如果你在前端开发中需要运行动态生成的 JavaScript 代码,那么 @fsandbox/fsandbox
可以是一个非常好的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600562de81e8991b448e0563