从字符串变量导入模块

Gur*_*ara 6 javascript typescript systemjs webpack angular

我需要从内存变量中导入JavaScript模块。我知道可以使用SystemJSWebpack来完成。

但是我在任何地方都找不到合适的工作示例或文档。这些文档主要讨论动态导入.js文件。

基本上我需要像下面那样导入模块

let moduleData = "export function doSomething(string) { return string + '-done'; };"
//Need code to import that moduleData into memory
Run Code Online (Sandbox Code Playgroud)

如果有人可以指向文档,那将是很棒的

小智 9

let moduleData = await import("data:text/javascript,export function doSomething(str) { return str + '-done'; }");
Run Code Online (Sandbox Code Playgroud)

并测试它

moduleData.doSomething('test');
Run Code Online (Sandbox Code Playgroud)


Fil*_*nti 6

import语法上有一些限制,如果不使用外部库,即使不是不可能,也很难做到。

我能得到的最接近的是使用动态导入语法。一个例子如下:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<script>
    var moduleData = "export function hello() { alert('hello'); };";
    var b64moduleData = "data:text/javascript;base64," + btoa(moduleData);

</script>
<script type="module">

    async function doimport() {
      const module = await import(b64moduleData);
      module.hello();
    }

    doimport();

</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,您会注意到这对构建导入代码的方式有一些限制,可能与您需要的不完全匹配。最简单的解决方案可能是将模块的代码发送到服务器上,以便它生成一个临时脚本,然后使用更传统的语法导入。