动态加载JS库的实践

在现代Web开发中,JavaScript库是构建交互式和功能丰富的网站不可或缺的部分。随着项目需求的增长,引入的库数量也在增加,这不仅增加了页面加载时间,还可能导致浏览器兼容性问题。为了解决这些问题,本文将介绍一种动态加载JS库的方法,它利用了ES6自定义元素和jsdelivrCDN服务。

项目概述

这个项目是一个实验性的库,它允许开发者根据库名称动态地从jsdelivrCDN加载任何JS库。它支持加载特定版本的库,并且可以在加载完成后执行回调函数。这个库使用同步HTTP调用来模拟script标签的阻塞行为,虽然这种方法已经被弃用,但在这个实验性项目中,它有助于模拟实际的加载过程。

如何使用

要在页面中使用这个库,首先需要在页面的头部添加一个script标签,指向scripty.js文件:

<script src="scripty.js"></script>

接下来,创建一个scripty标签,并使用packages属性指定所需的库名称:

<script-y packages="jquery"></script-y>

如果库名称包含多个单词(例如:angular icons或angular translate),只需在名称中包含空格,它将自动被替换为*,因为搜索API使用minimatch来找到最接近的值。

<script-y packages="jquery*ui"></script-y>

加载特定版本的库也是可能的,只需在库名称后使用@符号:

<script-y packages="jquery@3.1.0"></script-y>

脚本按照顺序加载,如果不同库之间存在依赖关系,只需按照顺序放置它们即可。

<script-y packages="angularjs,angular translate"></script-y>

如果需要,还可以使用locals属性加载一些本地JS文件(总是在packages完成后加载):

<script-y packages="jquery" locals="myscript.js"></script-y>

如果需要,可以添加一个回调函数,尽管脚本以阻塞机制运行,这意味着任何在scripty之后的脚本都将按照正常顺序执行。

<script-y packages="jquery" locals="external.js" oncomplete="amCallbackFunc()"></script-y>

注意事项

为什么使用同步调用?因为DOMContentLoaded事件只等待HTML和脚本,但不会等待通过document.createElement创建的脚本(称为动态脚本)。加载过程相当慢,因为组件流程如下:

  • 渲染组件并读取从HTML传递的所有内容并设置其属性。
  • 调用jsdilvr API以查找所需的库并检索将用于获取库的所有信息。
  • 创建script标签并将其添加到DOM中,然后评估已加载的脚本。
  • 当整个DOM准备就绪时,使用DOMContentLoaded事件调用回调方法。

运行示例

克隆项目,运行npm install,然后运行gulp watch。要查看加载的版本(如果只提到了库名称),请打开控制台,它将显示下载的版本,例如jquery@3.1.1。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485