从字符串变量导入模块

2024-05-27

我需要从内存变量导入 JavaScript 模块。 我知道这可以使用SystemJS and Webpack.

但我找不到一个好的工作示例或文档。文档主要讨论 .js 文件的动态导入。

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

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

如果有人能指出文档那就太好了


存在一些限制import语法使得如果不使用外部库就很难做到这一点(如果不是不可能的话)。

我能得到的最接近的是使用动态导入 https://v8.dev/features/dynamic-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>

现代化的:

function doimport (str) {
  if (globalThis.URL.createObjectURL) {
    const blob = new Blob([str], { type: 'text/javascript' })
    const url = URL.createObjectURL(blob)
    const module = import(url)
    URL.revokeObjectURL(url) // GC objectURLs
    return module
  }
  
  const url = "data:text/javascript;base64," + btoa(moduleData)
  return import(url)
}

var moduleData = "export function hello() { console.log('hello') }"
var blob = new Blob(["export function hello() { console.log('world') }"])

doimport(moduleData).then(mod => mod.hello())

// Works with ArrayBuffers, TypedArrays, DataViews, Blob/Files 
// and strings too, that If URL.createObjectURL is supported.
doimport(blob).then(mod => mod.hello())

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从字符串变量导入模块 的相关文章

  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • Angular 2 和 TypeScript 的承诺

    我正在尝试使用routerCanDeactivate我的应用程序中的组件的函数 简单的使用方法如下 routerCanDeactivate return confirm Are you sure you want to leave this
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 为 Angular2 中的组件加载多个样式表

    我正在构建一个 angular2 应用程序 当我尝试为同一组件加载多个样式表时 我面临多个问题 这是我正在做的代码 import Component from angular core Component selector my tag t
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • CSF3 中的 Typescript 支持

    我正在使用 CSF3 编写故事 并且我想正确注释我的故事 我用谷歌搜索过 基本上找不到答案 我尝试过一些技巧here https github com storybookjs storybook issues 7677但没有任何效果 我发现
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • 使用 Vite 和 React 进行生产构建时出错:Uncaught TypeError 中的错误:_ 不是函数

    我在我的网站上使用 Vite React React Router 和 TypeScript 我在运行生产构建时遇到问题 在开发模式下一切正常 使用生产版本时 我的浏览器显示白色背景 并且在浏览器控制台中出现以下错误 上面的链接将我带到第
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何使用 Angular CLI 在特定文件夹中生成组件?

    我将 Angular 4 与 Angular CLI 结合使用 并且可以使用以下命令创建一个新组件 E HiddenWords gt ng generate component plainsight 但我需要在 plainsight 中生成

随机推荐

  • Android 中拍摄的照片方向发生变化

    我通过单击按钮打开相机应用程序 并在下一个活动中显示捕获的照片 但拍摄的照片旋转了90度 当我捕获图像后在视图中显示图像时 它的方向始终是横向的 为什么在纵向模式下拍摄照片时 照片显示的不是纵向 onClick 按钮 Intent i ne
  • 拦截对对象属性的 __getitem__ 调用

    问题 我怎样才能拦截 getitem 调用对象属性 解释 所以 场景如下 我有一个对象将类似字典的对象存储为属性 每次 getitem 该属性的方法被调用 我想拦截该调用并根据键对获取的项目进行一些特殊处理 我想要的看起来像这样 class
  • 没有 Duende 身份服务器的 Blazor

    我有一个小型 Blazor WASM 项目 最近将其迁移到 net 6 但现在我尝试运行已发布的项目 应用程序警告我 我没有 Duende Identity Server 的许可证 我的问题是 我可以不用 Duende Identity S
  • 复杂的 Xpage 部分刷新需要很长时间

    我有一个复杂的 xpage 其中有很多嵌套的自定义控件 每次我执行部分刷新都需要超过 4 秒才能完成 如果我消除了复杂性 它就可以正常工作并且速度如您所愿 我对这个复杂的 Xpage 进行了测试 即使使用部分执行模式 这个简单的测试也需要
  • 如何在闪亮中使用带有reactiveValues的debounce

    我知道我可以像这样将 debounce 与reactive 结合使用 这就是我需要的行为 但我想改用reactiveValues ui lt fluidPage textInput inputId text label To see how
  • IPython 在第一个换行符之后结束缩进块的输入

    在 IPython 中 我无法输入多行缩进块 它结束输入 从 提示下一步In x 当我按下回车键时 例如 我正在尝试编写牛顿方法的示例实现来进行演示 我只能在它返回之前写第一行 所以我只能在 IPython 中输入以下内容 In 3 def
  • 如何在 Firebase 规则中限制用户根据电话号码读取/写入数据

    目前 我已经实现了类似于下面的项目文件夹结构 项目文件夹结构 https i stack imgur com gXkbO png 我已在代码中添加了电话身份验证 现在 在 Firebase 规则的帮助下 我想根据经过身份验证的电话号码限制我
  • 在 Python 中使用语法糖来实现组合函数是一个好主意吗?

    前段时间我查看了 Haskell 文档 发现它的函数组合运算符非常好 所以我实现了这个小装饰器 from functools import partial class compfunc partial def lshift self y f
  • 解析未完全加载 VBA 的网站

    尝试进行简单的网络解析 我的问题是页面在向下滚动之前无法完全加载 谷歌搜索已经提出可能使用硒 但由于我不知道如何使用它 我想我会在这里问 我使用的代码 Sub gfquote Dim oHttp As MSXML2 XMLHTTP Dim
  • .where 与 find。 ActiveRecord::Relation NoMethodError

    我是 Rails 新手 这似乎很明显 但找不到答案 当我做 u User where email email string u name new name 不起作用 我不断收到 NoMethodError undefined method
  • 从 Chrome 扩展程序中设置活动页面中的值活动输入

    I wrote an extension for Chrome I want when I click on button from my extension the value abc will be set into active in
  • 初始化单例的不同方式

    在 C 和 Java 中 我基本上看到了每个人初始化单例的一种方法 static obj inst null obj getInstance if inst null inst new obj return inst 现在 当我转向 iPh
  • 与 6 位随机字母数字代码发生冲突的概率是多少?

    我使用以下 Perl 代码生成随机字母数字字符串 仅限大写字母和数字 用作 MySQL 数据库中记录的唯一标识符 数据库的行数可能会保持在 1 000 000 行以下 但实际的绝对最大值约为 3 000 000 行 我是否有 2 条记录具有
  • 无法在 minikube 和 haproxy loadBalancer 中导出 IP

    我对 kubernetes 比较陌生 我已经在 virtualbox VM ubuntu 19 10 中安装了 minikube v1 5 2 我想创建一个可以从主机和访客访问的 Web 服务器 但是 我无法访问它或公开 IP 你可以帮帮我
  • Informix:带有输出参数的程序?

    我搜索了很多 但找不到任何东西 我只是想问是否有任何方法可以创建和调用过程 Informix 没有参数 我知道如何返回一个或多个值 对于过程和函数 但这不是我想要的 如果 Informix 不允许输出参数 那就真的很奇怪了 提前致谢 EDI
  • UUIDField 的“默认”属性是否负责唯一性?

    我刚刚跳入 Django 进行一个快速项目 我想有一个UUID字段 https docs djangoproject com en 2 2 ref models fields uuidfield在模型中 我将其用于外部 id 字段 每个模型
  • locust 0.9 至 1.3 例外:未定义任务。使用@task装饰器或设置User的tasks属性

    我有以下代码 在 Locust 0 9 中运行良好 现在在 1 3 中它会抛出标题中提到的异常 谁能看出出了什么问题吗 import time import random import datetime import requests fr
  • Vagrant + Chef:配置错误“虚拟机上缺少 Chef 所需的共享文件夹。”

    我已经使用 Chef library Chef 安装了 Vagrant Virtualbox 当我做vagrant up第一次 食谱被正确加载 但是 当我事后进行配置时 无论是vagrant provision vagrant reload
  • RequireJS 加载字符串

    在我的应用程序中 有一些动态部分从数据库中作为字符串加载 如下所示 define dependency1 dependency2 function function body 这只是一个简单的 requireJS 模块 作为一个字符串 我想
  • 从字符串变量导入模块

    我需要从内存变量导入 JavaScript 模块 我知道这可以使用SystemJS and Webpack 但我找不到一个好的工作示例或文档 文档主要讨论 js 文件的动态导入 基本上我需要像下面这样导入模块 let moduleData