在线资源链接查找
www.jsdelivr.com/ 可以在页面中自己进行搜索

同一个库的两种打包形式:
-
ESM:一种"有 import / export 语法"的模块写法
-
IIFE:一种"自执行函数+挂到全局变量"的老式写法
1️⃣ ESM 是啥?
ESM = ES Module = ES6 模块写法
特点:
-
用
import/export写的那种:javascriptimport * 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 版本:
javascriptimport * 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>引入。