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

相关推荐
卖火箭的小男孩8 小时前
# Flutter Provider 状态管理精讲(Vue 开发者视角)
前端
前端_yu小白8 小时前
react常用优化手段
前端·javascript·react.js·性能优化·usecallback·usememo
攀登的牵牛花8 小时前
前端向架构突围系列 - 框架设计(六):解析接口职责的单一与隔离
前端·架构
涵涵(互关)8 小时前
JavaScript 对大整数(超过 2^53 - 1)的精度丢失问题
java·javascript·vue.js
开开心心_Every8 小时前
离线黑白照片上色工具:操作简单效果逼真
java·服务器·前端·学习·edge·c#·powerpoint
Mintopia8 小时前
🌌 信任是否会成为未来的货币?
前端·人工智能·aigc
fqbqrr8 小时前
2601C++,模块导出分类
前端·c++
倚栏听风雨8 小时前
vscode 运用 ts 代码需要准备什么
前端
韩曙亮8 小时前
【Web APIs】浏览器本地存储 ① ( window.sessionStorage 本地存储 | window.localStorage 本地存储 )
服务器·前端·javascript·本地存储·localstorage·sessionstorage·web apis
吃杠碰小鸡8 小时前
前端Mac快速搭建开发环境
前端·macos