动态 ES2015 import() 外部模块(示例来自 Chrome 75 DevTools)
Dynamically ES2015 import() external module (example from Chrome 75 DevTools)
有没有一种方法可以使用动态导入加载到浏览器中Javascript 通过 CDN 提供的库,例如 jQuery 例如:
> import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(console.log)
.catch(console.error)
上面的代码并没有使 jQuery 可用,而是产生了相当模糊的结果:
感觉这个荒谬的简单示例,基本上遵循 MDN documentation,应该做一些不同于此的事情,特别是脚本应该被下载、解析并作为承诺的实现提供。
DevTools
的网络面板表明文件本身已正确下载,内容类型为 content-type: application/javascript
,但是没有迹象表明内容已被解释,如果它被制作available 尚不清楚如何访问它。
import()
returns a Promise
具有 Promise
需要的所有考虑因素。在这种情况下,jQuery 将在全局可用,这取决于 jQuery 如何初始化自身,但直到 Promise
解析。请记住,在 Promise
等待解析时,其他地方的代码可以免费使用 运行,但 jQuery 可能还不可用。
例如:
import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(() => {
jQuery('<div>Hello, World!</div>').appendTo('body');
});
或:
(async () => {
await import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js');
jQuery('<div>Hello, World!</div>').appendTo('body');
})();
但是这是有问题的:
<script>
(async () => {
await import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js');
jQuery('<div>Hello, World!</div>').appendTo('body');
})();
</script>
<script>
// jQuery usually won't be available here, so we get an exception
jQuery('<div>First?</div>').append('body');
</script>
这也可能是个问题:
import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(() => {
jQuery('<div>Hello, World!</div>').appendTo('body');
});
// No jQuery here, import hasn't resolved
jQuery('<div>First?</div>').append('body');
有没有一种方法可以使用动态导入加载到浏览器中Javascript 通过 CDN 提供的库,例如 jQuery 例如:
> import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(console.log)
.catch(console.error)
上面的代码并没有使 jQuery 可用,而是产生了相当模糊的结果:
感觉这个荒谬的简单示例,基本上遵循 MDN documentation,应该做一些不同于此的事情,特别是脚本应该被下载、解析并作为承诺的实现提供。
DevTools
的网络面板表明文件本身已正确下载,内容类型为 content-type: application/javascript
,但是没有迹象表明内容已被解释,如果它被制作available 尚不清楚如何访问它。
import()
returns a Promise
具有 Promise
需要的所有考虑因素。在这种情况下,jQuery 将在全局可用,这取决于 jQuery 如何初始化自身,但直到 Promise
解析。请记住,在 Promise
等待解析时,其他地方的代码可以免费使用 运行,但 jQuery 可能还不可用。
例如:
import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(() => {
jQuery('<div>Hello, World!</div>').appendTo('body');
});
或:
(async () => {
await import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js');
jQuery('<div>Hello, World!</div>').appendTo('body');
})();
但是这是有问题的:
<script>
(async () => {
await import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js');
jQuery('<div>Hello, World!</div>').appendTo('body');
})();
</script>
<script>
// jQuery usually won't be available here, so we get an exception
jQuery('<div>First?</div>').append('body');
</script>
这也可能是个问题:
import('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.js')
.then(() => {
jQuery('<div>Hello, World!</div>').appendTo('body');
});
// No jQuery here, import hasn't resolved
jQuery('<div>First?</div>').append('body');