Javascript 动态ES2015 import()外部模块(来自Chrome 75 DevTools的示例)
是否有一种方法可以使用动态导入加载到通过CDN提供的浏览器Javascript库中,如jQuery,例如:Javascript 动态ES2015 import()外部模块(来自Chrome 75 DevTools的示例),javascript,browser,ecmascript-6,javascript-import,Javascript,Browser,Ecmascript 6,Javascript Import,是否有一种方法可以使用动态导入加载到通过CDN提供的浏览器Javascript库中,如jQuery,例如: > import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js') .then(console.log) .catch(console.error) 上述内容并没有使jQuery可用,而是产生了一个相当模糊的结果: 感觉这个荒谬的简单示例,本质上遵循,应该做其他事情,尤其是脚本应
> import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(console.log)
.catch(console.error)
上述内容并没有使jQuery可用,而是产生了一个相当模糊的结果:
感觉这个荒谬的简单示例,本质上遵循,应该做其他事情,尤其是脚本应该下载、解析,并作为承诺的实现提供
DevTools
的网络面板表明该文件本身已正确下载,内容类型为content-type:application/javascript
,但是没有迹象表明该内容已被解释,如果该内容可用,则不清楚如何访问它。import()
返回一个承诺
,其中包含承诺所包含的所有注意事项。在这种情况下,jQuery将全局可用,这取决于jQuery如何初始化自身,但直到承诺解决为止。请记住,当承诺
正在等待解决时,其他地方的代码可以自由运行,但jQuery可能还不可用
例如:
import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.然后(()=>{
jQuery('Hello,World!')。appendTo('body');
});代码>文件已被解释。例如:import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js,然后(=>console.log($.fn.jquery))
@Paulpro您是说当通过import
关键字导入时,jQuery CDN(以及通常的UMD)显示为全局变量吗?(即,观察到的行为是否正确?)我认为UMD在导入时没有任何作用。ES6模块需要导出一些东西,以便导入有用。jQuery不是一个模块,因此,尽管它被解释为一个模块,但它没有导出,并且从导入的模块访问没有任何有用的内容。在解释时,它确实分配给了窗口。$
,因此它可以通过“脚本应该是并作为承诺的实现而可用”的方式访问-不确定这里的“脚本”是什么意思。该承诺通过模块的名称空间对象实现,该对象包含导出的所有内容。因为jQuery脚本没有任何export
语句,所以它是空的(除了符号)。@Bergi这很有意义。我所期望的脚本
与从“jQuery”
导入的as jQuery的结果类似(我想,除非进行传输,否则会产生相同的结果)。