ESM (放到打包里 import) 和 IIFE (URL 动态 loadScript)

在线资源链接查找

www.jsdelivr.com/ 可以在页面中自己进行搜索

同一个库的两种打包形式:

  • ESM:一种"有 import / export 语法"的模块写法

  • IIFE:一种"自执行函数+挂到全局变量"的老式写法

1️⃣ ESM 是啥?

ESM = ES Module = ES6 模块写法

特点:

  • 用 import / export 写的那种:

    javascript 复制代码
    import * as ElementPlusIconsVue from '@element-plus/icons-vue'
  • 浏览器里要么用:

    xml 复制代码
    <script type="module" src="main.js"></script>
  • 要么在打包工具中使用(Vite / Webpack / Rollup 都懂 ESM)

  • 代码不会自动挂到 window 上,每个文件是一个模块作用域

所以:

"ESM 写法要 import * as ElementPlusIconsVue"

就是因为这个版本是按 ESM 规范打包的,只能通过 import 加载。

2️⃣ IIFE 是啥?

IIFE = Immediately Invoked Function Expression = 立即执行函数表达式

典型长这样:

javascript 复制代码
(function () {
  // 一堆库的代码
  // 最后把东西挂到 window 上
  window.ElementPlusIconsVue = { ... }
})();

特点:

  • 一加载 <script src="icons-vue.iife.min.js"></script>,函数就立即执行
  • 执行时会往 window 上挂一个全局变量,比如 window.ElementPlusIconsVue
  • 不需要 import / export,适合不用打包工具、直接 script 标签引入的场景

所以 Element Plus 会提供一个:

xml 复制代码
<script src="https://unpkg.com/@element-plus/icons-vue/dist/icons-vue.iife.min.js"></script>

然后你在代码里就可以直接用:

javascript 复制代码
const icons = window.ElementPlusIconsVue
// 或者有些库直接挂到全局变量 ElementPlusIconsVue

"IIFE 写法要加载 icons-vue.iife.min.js"

意思就是这个文件本身是一个 IIFE,加载后库会自动挂在 window 上。

3️⃣ 和你现在的使用场景怎么对应?

你现在是脚本猫 + 在现有网页里插 Vue3 / Element Plus:

  • 如果你是自己用 Vite 打包一个 userscript ,那你就写 ESM 版本:

    javascript 复制代码
    import * as ElementPlusIconsVue from '@element-plus/icons-vue'
  • 如果你是在网页里动态用 <script> 加远程资源 (unpkg / 自己静态资源),

    没有打包,也没有 type="module",那就用 IIFE 版本:

    xml 复制代码
    <script src=".../vue.global.prod.js"></script>
    <script src=".../element-plus.iife.min.js"></script>
    <script src=".../icons-vue.iife.min.js"></script>
    <script>
      // 这时候一般会有全局变量 ElementPlus, ElementPlusIconsVue
      const app = Vue.createApp({...})
      for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
        app.component(key, component)
      }
      app.use(ElementPlus)
      app.mount('#app')
    </script>

    4️⃣ 一句话对比记忆

  • ESM :

    👉 模块化新标准,import / export,配合打包工具 / <script type="module">。

  • IIFE :

    👉 "一加载就执行"的老派打包形式,自动把东西丢到 window.xxx 上,适合直接 <script> 引入。

相关推荐
福兮说2 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理3 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6663 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人4 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)4 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan4 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_5 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒5 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技5 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu6 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub