unbuild

介绍

unbuild 通常用于做:工具库、npm 包、Vue 插件,是一个专门为 npm 库设计的构建工具。

特点是:

  1. 自动输出 ESM + CJS
  2. 自动生成类型
  3. 零配置
  4. 适合库开发
  5. unbuild 底层用的是 Rollup,所有 node_modules 默认 external。

配置

js 复制代码
import { defineBuildConfig } from 'unbuild';

export default defineBuildConfig({
  // 每次构建前,先删除 dist 目录
  clean: true,
  // 生成 TypeScript 类型声明文件 (.d.ts)
  declaration: true,
  // 以 src/index.ts 作为入口文件
  entries: ['src/index'],
  rollup: { emitCJS: true }
});

打包产物分析

打包产物

js 复制代码
index.cjs
index.mjs
index.d.ts
index.d.mts
index.d.cts
  1. index.mjs
  • ES Module 版本,老 Node 项目或老工具用。
  • 用于import { xxx } from 'your-lib'
  1. index.cjs
  • CommonJS 版本
  • 用于const lib = require('your-lib')
  1. index.d.ts
  • 通用 TypeScript 类型声明,
  • 默认类型入口
  1. index.d.mts
  • ESM 模块的类型声明
  • 用于type: "module" 或者 Node ESM 解析场景。
  • 和 d.ts 的区别:明确声明是 ESM 类型
  1. index.d.cts
  • CommonJS 类型声明
  • 在严格 CJS + TS 模式下用。

三种类型文件

js 复制代码
index.d.ts   ← 最重要
index.mjs    ← 主入口
index.cjs    ← 兼容

d.mts / d.cts 是增强兼容用。

unbuild package.json

json 复制代码

"type": "module"

type: module 限制的是包内部的 .js 文件

如果你有:

js 复制代码
dist/index.js

在:

js 复制代码
"type": "module"

下,它会被当作 ESM。

架构

js 复制代码
vue → peerDependencies
@iconify/vue → peerDependencies

图标组件是 UI 层能力,不是运行时核心依赖,让宿主决定 iconify 版本是更安全的。

相关推荐
升鲜宝供应链及收银系统源代码服务9 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
i建模10 小时前
将Edge浏览器的标签页从顶部水平排列**移至左侧垂直侧边栏
前端·edge
跟着珅聪学java10 小时前
js编写中文转unicode 教程
前端·javascript·数据库
英俊潇洒美少年10 小时前
Vue3 深入响应式系统
前端·javascript·vue.js
英俊潇洒美少年11 小时前
React 最核心 3 大底层原理:Fiber + Diff + 事件系统
前端·react.js·前端框架
我命由我1234511 小时前
React Router 6 - 概述、基础路由、重定向、NavLink、路由表
前端·javascript·react.js·前端框架·ecmascript·html5·js
LJianK112 小时前
java封装
java·前端·数据库
yaaakaaang12 小时前
(四)前端,如此简单!---Promise
前端·javascript
GISer_Jing12 小时前
ReAct规划原理实战指南
前端·react.js·ai·aigc
SoaringHeart12 小时前
Flutter组件封装:翻转组件 NFlipCard
前端·flutter