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> 引入。

相关推荐
ai超级个体21 分钟前
别再吹牛了,100% Vibe Coding 存在无法自洽的逻辑漏洞!
前端·ai·ai编程·vibe coding
Mike_jia44 分钟前
🎓 OpenMAIC 终极指南:清华开源的多智能体 AI 互动课堂平台
前端
踩着两条虫1 小时前
告别低代码“黑盒”!VTJ.PRO 2.0:用AI与自由重塑Vue3开发
前端·低代码·ai编程
OpenTiny社区1 小时前
WebAgent :基于 MCP 协议打造的智能应用“超级路由器”
前端·agent·mcp
吴声子夜歌1 小时前
TypeScript——模块解析
javascript·ubuntu·typescript
dweizhao1 小时前
别再用 Figma 画线框图了,Google 这款免费工具直接出 UI 稿
前端
han_2 小时前
JavaScript设计模式(五):装饰者模式实现与应用
前端·javascript·设计模式
ProgramHelpOa2 小时前
Amazon SDE Intern OA 2026 最新复盘|70分钟两题 Medium-Hard
java·前端·javascript
smchaopiao2 小时前
如何用CSS和JS搞定全屏图片展示
前端·javascript·css
酉鬼女又兒2 小时前
零基础快速入门前端CSS Transform 与动画核心知识点及蓝桥杯 Web 应用开发考点解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·css·职场和发展·蓝桥杯·html