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 版本是更安全的。

相关推荐
小码哥_常3 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮5 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀7 小时前
Vue插槽
前端·javascript·vue.js
qq_448011167 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan7 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352908 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝8 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing039 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel9 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放9 小时前
Python基础语法练习题(73)
java·前端·python