es6模块加载是如何工作的

2024-03-22

我去过reading https://github.com/systemjs/systemjs about https://github.com/systemjs/systemjs ES6模块加载器 https://github.com/ModuleLoader/es6-module-loader我只是不太明白它是如何工作的,希望有人能启发我。

在上面的实际工作流程链接中,他们有一个这样的示例

System.import('app/app').then(function(app) {
  // app is now the Module object with exports as getters
});

没问题——我明白了。但后来我看到这样的东西

var $ = require('jquery');

并感到非常困惑。如果在调用时 jquery 尚未传输到浏览器,会发生什么情况?线只是旋转吗?浏览器是否会像 RequireJs 那样在幕后解析您的脚本并将其重组为回调?它的作用是可配置的吗?有具体限制吗?

有人能给我一个概要吗?


ES6 模块加载器将获取源代码,确定依赖关系,并等到这些依赖关系加载完毕后再执行模块。因此,当 require 执行时,依赖项已经坐在那里等待执行。

当通过 ES6 模块加载器加载 CommonJS 时,我们依赖于从源中静态解析出 require 语句,并且仅在加载这些 require 后才执行源。

这样我们就可以在浏览器中动态加载支持CommonJS了。循环引用的处理方式与 Node.js 中的处理方式相同。

解析需求的正则表达式实际上非常可靠且快速,同时考虑了注释和周围的标记。看https://github.com/systemjs/systemjs/blob/master/lib/extension-cjs.js#L10 https://github.com/systemjs/systemjs/blob/master/lib/extension-cjs.js#L10对于 SystemJS 使用的那个。

这种方法还有一个限制,那就是动态和有条件的 CommonJS 要求,例如if (condition) require('some' + 'name')未正确检测到。不过,要使 CommonJS 在浏览器中表现为完全异步的模块格式,这是必要的成本。

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

es6模块加载是如何工作的 的相关文章

随机推荐

  • ActiveX 控件是否被禁用?

    我的 Excel 工作表使用 ActiveX 复选框来控制某些活动 今天他们开始报错 一位运行更高版本 Excel 的同事向我发出了警报 但它仍然可以在我的计算机上运行 我注意到有 Windows 更新 所以我进行了更新 现在它不再在我的计
  • std::vector 到带有自定义分隔符的字符串

    我想复制a的内容vector到一长string带有自定义分隔符 到目前为止 我已经尝试过 h string getLabeledPointsString const string delimiter cpp string Gesture g
  • 数据表到嵌套列表

    我想转换 library data table n lt 12 DT lt data table level1 rep paste0 Manu 1 2 each n 2 level2 rep paste0 Dept 1 4 each n 4
  • 验证 Tensorflow 流中是否存在该文件。使用 tf.gfile.Exists 以字符串张量作为输入

    使用 Tensorflow 我试图在读取文件之前验证文件是否存在tf read file filename 不幸的是 按照我的管道的设置方式 我正在使用以下命令动态生成文件名字符串tf命令 我使用生成文件名字符串tf string join
  • 跟踪 XWindow 协议

    是否可以使用工具跟踪 XWindow 协议 我认为wireshark将是一个很好的框架来承载这样的想法 但似乎没有支持 为了实现这个目标应该做什么 Wiresharkdoes具有剖析X Window协议的能力 但是 您首先必须能够捕获 X
  • 用于多个 Maven 模块项目的 proguard

    我在多模块 Maven 项目中有一个对 proguard 的插件引用 我的项目的功能已经过全面测试并且可以工作 直到我添加 proguard 我的项目的结构 parent pom module a pom module b pom test
  • Maven - 添加集成测试

    尝试将 Maven 构建中的测试拆分为单元测试和集成测试 我正在使用故障安全插件来运行集成测试 并尝试使用 build helper maven plugin 从 src it java 目录添加集成测试 当我尝试进行构建时出现错误 但我看
  • 复制Mysql数据库的数据库结构

    我正在使用 MySql 5 1 数据库 我创建了一个项目数据库 模板数据库 并希望每次用户创建新项目时从应用程序创建同一数据库的副本 如何复制并创建相同结构的新数据库 这样做的命令是什么 如果您只想将表结构等从一个数据库复制到另一个数据库
  • WooCommerce 中的多个订单

    我想在类别页面中按平均评分 DESC 然后按价格 ASC 订购产品 id avgrating price 1 4 10 2 4 5 3 5 7 顺序 3 2 1 所以我尝试了 args meta key wc average rating
  • Flex:跨分辨率应用

    What is the best way to create applications in Flex AIR which look and feel the same irrespective of the screen resoluti
  • Django 接受一个整数到 CharField 中

    我正在学习 django 并创建了一个Page form class像这样 from django import forms class Page forms Form title forms CharField max length 20
  • 如何让我自己的 JavaScript 函数具有必需的参数?

    当我在intellij idea中编写javascript时 我可以检查我正在调用的函数的参数 它会显示类似的内容 我不确定这是否是一个 intellij 功能 它了解标准库 或者它是否是一个 javascript 功能 可以让您将参数标记
  • FabricJS 触摸平移/缩放整个画布

    我需要在 FabricJS 画布上启用触摸缩放 平移 有些库允许在图像上执行此行为 请参阅捏缩放画布 https github com vash15 pinch zoom canvas 或通过鼠标单击事件 参见这个小提琴 http jsfi
  • 如何保持每 5 秒请求一次页面而不耗尽电池电量?

    我正在开发的 Android 应用程序需要每 5 秒在我的服务器上请求一个页面 但我担心这会消耗大量电池 有没有更简单的方法 我当前的方法是每 5 秒循环一次的服务 protected void onHandleIntent Intent
  • 如何使用 extern 在 C++ 中的源文件之间共享 Globe 变量?

    IDE 代码块 13 12 main cpp include
  • python继承:使用参数选择父类

    我在设计一些课程时遇到困难 我希望我的用户能够通过传递角色类型的参数 例如战士 向导 来使用Character 类 虚拟代码 class CharClass def init self level self level level clas
  • 在 MSTest 中如何查找要在 ClassInitialize 或 AssemblyInitialize 中运行的测试总数?

    使用 MStest 我想查找排队等待运行的测试方法的总数 我应该如何捕获这个值ClassInitialize or AssemblyInitialize 方法 我唯一得到的是 TestContext 它没有测试总数的详细信息 我实际上对此有
  • 在 awk 中使用双引号[重复]

    这个问题在这里已经有答案了 该命令将打印a echo line1 a b c awk print 2 如果我将单引号更改为双引号 就像这样 它将打印整行 echo line1 a b c awk print 2 为什么 我知道我应该使用单引
  • 如何为给定模式提供关系代数?

    员工 姓名 街道 城市 作品 人名 公司名称 工资 公司 公司名称 城市 管理 人员姓名 经理姓名 查找此数据库中所有不为第一银行公司工作的员工的姓名 假设所有人都为一家公司工作 并且允许人员出现在数据库中 例如 在员工中 但不能出现在作品
  • es6模块加载是如何工作的

    我去过reading https github com systemjs systemjs about https github com systemjs systemjs ES6模块加载器 https github com ModuleL