微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从无效代码访问导入的功能

如何解决从无效代码访问导入的功能

我有一个带有以下代码的TypeScript文件

import { functionTest } from './function_test'

function runnerFunctiontest() {
    console.log("Test");
}

export class Runner {
    run(source : string) {
        eval(source);
    }
}

如果我实例化一个Runner调用run("runnerFunctiontest();"),该函数将正确运行,但是如果我调用run("functiontest();")(应运行导入的函数),则会出现一个错误提示{{1} }未定义。

我该如何解决

我尝试过的一件事是用functionTest替换了run中的代码,但是必须添加所有这样的导入函数实在很烦人-它们大约有20个,并且数字只会随着时间的流逝而增加

此外,我知道调用new Function('functionTest',source).(functionTest);的安全性-这是(至少我知道)做我想要的事情的唯一方法,该方法运行用户在其中生成的任意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()')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。