我去过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(使用前将#替换为@)