从评估的代码访问导入的函数
Access imported functions from evaled code
我有一个包含以下代码的 TypeScript 文件:
import { functionTest } from './function_test'
function runnerFunctionTest() {
console.log("Test");
}
export class Runner {
run(source : string) {
eval(source);
}
}
如果我实例化一个 Runner
并正确调用 run("runnerFunctionTest();")
函数 运行s,但是如果我调用 run("functionTest();")
(应该 运行 导入函数)我收到一条错误消息,说 functionTest
未定义。
我该如何解决这个问题?
我试过的一件事是用 new Function('functionTest', source).(functionTest);
替换 run
中的代码,这很有效,但是必须像这样添加所有导入的函数真的很烦人——大约有 20 个而且这个数字只会随着时间的推移而增加。
此外,我知道调用 eval
的安全隐患 - 这是唯一的方式(至少我知道)做我想做的事,这是 运行ning 任意JavaScript 用户在用户浏览器中生成的代码。
因为import
不是原生算子,webpack(或者别的什么)给你改造了。
通过 webpack 编译后,你的代码变成:
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Runner", function() { return Runner; });
/* harmony import */ var _function_test__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
function runnerFunctionTest() {
console.log("Test");
}
class Runner {
run(source) {
eval(source);
}
}
名称 functionTest
已不存在,这就是您无法评估它的原因。
一个可能的解决方案是给它一个本地名称:
import { functionTest } from './function_test'
const function_test = functionTest;
function runnerFunctionTest() {
console.log("Test");
}
export class Runner {
run(source : string) {
eval(source);
}
}
那你可以运行runner.run('function_test()')
我有一个包含以下代码的 TypeScript 文件:
import { functionTest } from './function_test'
function runnerFunctionTest() {
console.log("Test");
}
export class Runner {
run(source : string) {
eval(source);
}
}
如果我实例化一个 Runner
并正确调用 run("runnerFunctionTest();")
函数 运行s,但是如果我调用 run("functionTest();")
(应该 运行 导入函数)我收到一条错误消息,说 functionTest
未定义。
我该如何解决这个问题?
我试过的一件事是用 new Function('functionTest', source).(functionTest);
替换 run
中的代码,这很有效,但是必须像这样添加所有导入的函数真的很烦人——大约有 20 个而且这个数字只会随着时间的推移而增加。
此外,我知道调用 eval
的安全隐患 - 这是唯一的方式(至少我知道)做我想做的事,这是 运行ning 任意JavaScript 用户在用户浏览器中生成的代码。
因为import
不是原生算子,webpack(或者别的什么)给你改造了。
通过 webpack 编译后,你的代码变成:
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Runner", function() { return Runner; });
/* harmony import */ var _function_test__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
function runnerFunctionTest() {
console.log("Test");
}
class Runner {
run(source) {
eval(source);
}
}
名称 functionTest
已不存在,这就是您无法评估它的原因。
一个可能的解决方案是给它一个本地名称:
import { functionTest } from './function_test'
const function_test = functionTest;
function runnerFunctionTest() {
console.log("Test");
}
export class Runner {
run(source : string) {
eval(source);
}
}
那你可以运行runner.run('function_test()')