夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
    • Markdown使用教程
    • npm常用命令
    • yarn基本命令
    • npm packageJson属性详解
    • yaml语言教程
    • Stylus预处理语言
    • Less预处理语言
    • Sass预处理语言
    • PWA运用
    • 富文本编辑器Ueditor
    • 发布npm
    • 构建一个TS的npm包
    • tsup打包工具
      • tsup使用基础
      • 配置项
        • 指定声明文件
        • 指定 ES5
        • 构建依赖排除
        • treeshake
        • 自定义 Esbuild 插件
    • leaflet地图框架
    • pdfjs-dist使用
    • xlsx插件使用
    • changesets
    • release-it
    • mathjs
  • GitHub技巧

  • 博客搭建

  • Ajax

  • Vite

  • Vitest

  • Nuxt

  • UI库文章

  • Docker

  • 技术
  • 技术文档
夜猫子
2024-04-17
目录

tsup打包工具

# tsup使用基础

what tsup? 其基于 esbuild 驱动,内置了 TypeScript 支持,旨在用于替换 rollup 的,更现代化的,更易于 ts 的打包工具。

# 配置项

其他具体配置可以看官方文档,这里列举一些项目中常用的配置

// tsup.config.ts
export default defineConfig({
   // ... 配置项
})
1
2
3
4

# 指定声明文件

dts?: string | boolean | DtsConfig

指定是否生成声明文件

export default defineConfig({
    dts: true,
})
1
2
3
export default defineConfig({
    resolve: ['axios'] // 指定第三方包名,可以直接把三方包中的类型编译过来
})
1
2
3

# 指定 ES5

将 target 设置为 es5 即可。

注意:还需要装 swc/code 这个包,否则无法构建成功。

因为 esbuild 无法构建出 es5 代码,所以在构建 es5 的时候作者使用 swc/code来构建

export default defineConfig({
    target: 'es5',
})
1
2
3

# 构建依赖排除

external?: (string | RegExp)[]

tsup 默认会排除 package.json 中 dependencies peerDependencies依赖包,可以使用 external 将其他的包排除,有趣的是这个配置可以传路径。

export default defineConfig({
    external: ['vue'],
})
1
2
3

# treeshake

tsup 的 tree shaking 是需要手动开启的,其实 rollup 的 tree shaking也是需要手动开启(tsup 用 rollup 做的 tree shaking),为什么不自动开启,这样还能让代码体积更小。

因为自动开启后会将代码中没有用到的代码过滤掉。可工具不是智能的,它并不知道你这段代码"到底"有没有用。

webpack开启 tree shaking 的时候还会出现第三方包代码摇不掉的情况,webpack 还需要判断第三方包 package.json 是否有 sideEffects字段!

export default defineConfig({
    treeshake: true,
})
1
2
3

# 自定义 Esbuild 插件

esbuild插件文档 (opens new window)

tsup 内部使用了 esbuild,当 esbuild 构建不满足你的需求,你可以开发自己的 esbuild 插件。

import { defineConfig } from 'tsup'

export default defineConfig({
  esbuildPlugins: [YourPlugin],
  esbuildOptions(options, context) {
    options.define.foo = '"bar"'
  },
})
1
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2024/4/18 10:11:43
构建一个TS的npm包
leaflet地图框架

← 构建一个TS的npm包 leaflet地图框架→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式