javascript - 加载动态 JavaScript 包的最佳方式
问题描述
动态加载 JavaScript 代码时,至少有两种可能的方法。
一种方法是使用/将代码加载为字符串,然后使用 / 执行XHR
它。Fetch
eval
Function
Webpack 动态导入实际使用的另一种方法是将一个<script>
元素插入到文档中,并将包的代码包装到 JSONP 回调函数中。这样,浏览器会自动加载和编译代码,并调用包装函数通知加载的代码已准备好执行。
GoogleChromeLabs在动态导入polyfill中实现了另一种方法。他们正在创建一个脚本元素并传递动态生成的代码以使用 blob src 加载请求的文件:
const moduleBlob = new Blob([
`import * as m from '${absURL}';`,
`${importFunctionName}.moduleMap['${absURL}']=m;`,
], {type: 'text/javascript'});
但是,它需要对某些 ESM 功能的基本支持(在 IE 11 等旧版浏览器中不可用),并且需要在存在时正确配置CSP 。
/方法看起来更方便,因为它更简单并且允许以任何通用格式加载模块,例如 CommonJS eval
/ Function
AMD,并且它不需要存在专有的包装函数。
这些方法之间的主要区别是什么?哪种方法更好?以及为什么 Webpack 和 Google 决定不使用eval
/Function
方法?
解决方案
推荐阅读
- java - Java bean 验证不适用于 web 初始化活页夹
- sql - 具有许多表的 PostgreSQL 最佳 SELECT 查询
- javascript - 单击链接时如何显示加载 gif
- c++ - 在 C++/CLI 程序集中导出的空命名空间
- twitter-bootstrap - Bootstrap 右对齐
- mysql - MySQL 通过一个值连接两个表并获取其他结果(也没有该值)
- java - 球衣客户端语法不正确的请求错误
- perl - 使用 Getopt::Long 解析参数的最简洁方法
- hibernate - HandlerInterceptor 中的休眠会话
- xml - Odoo-当没有用户登录时隐藏网站菜单,反之亦然