You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tailwind预设编译报错:dynamic require of 'tailwindcss/plugin' is not supported

解决tsup打包Tailwind预设时的"dynamic require of 'tailwindcss/plugin'"错误

问题场景

我开发了一个UI组件库,其中创建了Tailwind预设并从入口文件导出,预设代码如下:

import { PresetsConfig } from "tailwindcss/types/config";
import twAnimate from "tailwindcss-animate";
import twScrollbar from "tailwind-scrollbar";

const preset = {
  darkMode: ["class", '[data-mode="dark"]'],
  safelist: [...],
  plugins: [twAnimate, twScrollbar],
  theme: {...},
} satisfies PresetsConfig;

export default preset;

使用tsup打包的配置如下:

import { defineConfig } from "tsup";

export default defineConfig({
  clean: true,
  dts: true,
  entry: ["src/index.ts"],
  outDir: "lib",
  format: ["cjs", "esm"],
  minify: true,
  treeshake: true,
  tsconfig: "tsconfig.json",
  splitting: true,
  sourcemap: false,
});

编译时出现报错:dynamic require of 'tailwindcss/plugin' is not supported

原因分析

错误源于tailwindcss-animate、tailwind-scrollbar这类Tailwind插件内部使用了动态require加载tailwindcss/plugin,而tsup在同时打包CJS/ESM格式、开启代码分割或tree-shaking时,默认的模块解析逻辑无法兼容这种动态导入方式。

解决方案

1. 关闭代码分割

tsup的splitting选项会将代码拆分为多个chunk,容易触发动态require的解析错误。修改配置关闭该选项:

import { defineConfig } from "tsup";

export default defineConfig({
  clean: true,
  dts: true,
  entry: ["src/index.ts"],
  outDir: "lib",
  format: ["cjs", "esm"],
  minify: true,
  treeshake: true,
  tsconfig: "tsconfig.json",
  splitting: false, // 关闭代码分割
  sourcemap: false,
});

2. 将Tailwind相关依赖标记为外部依赖

由于预设是供用户在自己的Tailwind配置中引入的,无需将Tailwind核心库及插件打包到组件库中,让用户自行安装这些依赖即可。修改tsup配置添加external选项:

import { defineConfig } from "tsup";

export default defineConfig({
  clean: true,
  dts: true,
  entry: ["src/index.ts"],
  outDir: "lib",
  format: ["cjs", "esm"],
  minify: true,
  treeshake: true,
  tsconfig: "tsconfig.json",
  splitting: true,
  sourcemap: false,
  external: ["tailwindcss", "tailwindcss/plugin", "tailwindcss-animate", "tailwind-scrollbar"],
});

同时在package.json中把这些依赖移到peerDependencies,提示用户需要安装:

{
  "peerDependencies": {
    "tailwindcss": "^3.0.0",
    "tailwindcss-animate": "^1.0.0",
    "tailwind-scrollbar": "^3.0.0"
  }
}

3. 调整Tree-shaking策略

如果不想关闭代码分割,可以尝试修改tree-shaking的模式,将默认的true(即module)改为smallest:

import { defineConfig } from "tsup";

export default defineConfig({
  clean: true,
  dts: true,
  entry: ["src/index.ts"],
  outDir: "lib",
  format: ["cjs", "esm"],
  minify: true,
  treeshake: "smallest", // 调整tree-shaking策略
  tsconfig: "tsconfig.json",
  splitting: true,
  sourcemap: false,
});

内容的提问来源于stack exchange,提问作者tr43o

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:06:17