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

相关推荐
东东5162 分钟前
OA自动化居家办公管理系统 ssm+vue
java·前端·vue.js·后端·毕业设计·毕设
周某人姓周6 分钟前
DOM型XSS案例
前端·安全·web安全·网络安全·xss
程序员鱼皮17 分钟前
前特斯拉 AI 总监:AI 编程最大的谎言,是 “提效”
前端·后端·ai·程序员·开发
pusheng202528 分钟前
普晟传感2026年新春年会总结与分析
前端·javascript·html
谢尔登30 分钟前
React19事件调度的设计思路
前端·javascript·react.js
Emma_Maria40 分钟前
本地项目html和jquery,访问地址报跨域解决
前端·html·jquery
奋斗吧程序媛1 小时前
常用且好用的命令
前端·编辑器
2301_796512521 小时前
【精通篇】打造React Native鸿蒙跨平台开发高级复合组件库开发系列:Lazyload 懒加载(懒加载的图片)
前端·javascript·react native·react.js·ecmascript·harmonyos
敲敲了个代码1 小时前
从N倍人力到1次修改:Vite Plugin Modular 如何拯救多产品前端维护困境
前端·javascript·面试·职场和发展·typescript·vite
摘星编程1 小时前
OpenHarmony环境下React Native:Timeline时间轴组件
javascript·react native·react.js