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

相关推荐
To_OC3 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
To_OC3 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
vipbic3 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy3 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志4 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble5 小时前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长5 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯6 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜6 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能