Javascript 动态ES2015 import()外部模块(来自Chrome 75 DevTools的示例)

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可用,而是产生了一个相当模糊的结果: 感觉这个荒谬的简单示例,本质上遵循,应该做其他事情,尤其是脚本应

是否有一种方法可以使用动态导入加载到通过CDN提供的浏览器Javascript库中,如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的结果类似(我想,除非进行传输,否则会产生相同的结果)。