如何让tsup/unbuild将第三方依赖打包进输出文件而非依赖node_modules?
实现第三方依赖代码内联打包(tsup/unbuild)
完全可行,这本质是让打包器把指定第三方库的代码**内联(bundle)**到你的库输出文件中,同时通过TreeShaking只保留你实际用到的代码片段,终端用户无需额外安装依赖。下面分别给出tsup和unbuild的配置方案:
一、tsup 配置方法
tsup默认在库模式下会将node_modules中的依赖标记为外部依赖(external),所以需要修改配置,将目标依赖从external列表中排除:
创建或修改tsup.config.ts:
import { defineConfig } from "tsup"; export default defineConfig({ entry: ["src/index.ts"], // 你的入口文件 format: ["esm", "cjs"], // 输出格式,按需选择 dts: true, // 生成类型声明文件 external: [], // 空数组表示不排除任何依赖,也可以明确指定不包含"change-case" treeshake: true, // 自动移除未使用的代码(默认开启,可显式声明) minify: true, // 可选,压缩代码进一步减小体积 });
配置后执行打包命令,输出文件中就会包含camelCase函数的实现,而非保留import语句。
二、unbuild 配置方法
unbuild基于Rollup,默认同样会将第三方依赖设为外部依赖,可通过两种方式实现内联:
方式1:使用inlineDependencies指定内联依赖
修改unbuild.config.ts:
import { defineBuildConfig } from "unbuild"; export default defineBuildConfig({ entries: ["src/index"], declaration: true, inlineDependencies: ["change-case"], // 明确指定要内联的依赖 rollup: { treeshake: true, // 开启TreeShaking保留必要代码 emitCJS: true, // 按需生成CommonJS格式 }, });
方式2:修改externals排除目标依赖
import { defineBuildConfig } from "unbuild"; export default defineBuildConfig({ entries: ["src/index"], declaration: true, externals: { "change-case": false, // 将该依赖从外部依赖中移除 }, rollup: { treeshake: true, }, });
验证效果
执行打包后,查看输出文件(比如dist/index.js),会看到camelCase的具体实现被内联,而非保留import { camelCase } from "change-case"的语句,和你期望的输出一致。
内容的提问来源于stack exchange,提问作者Anton Ödman
相关产品推荐
相关产品推荐

