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

Rollup打包组件库时意外打包输入范围外的example目录问题排查

问题成因与解决方案

这问题我之前帮朋友排查过类似的,核心原因其实出在TypeScript的编译范围配置和你使用的rollup-plugin-typescript3插件的工作逻辑上,具体拆解如下:

为什么Rollup会扫描example目录?

Rollup本身确实只会处理你指定的src/index.ts入口文件,但rollup-plugin-typescript3是基于TypeScript原生编译逻辑运行的——它会优先读取项目根目录下tsconfig.json里的include和exclude规则,来确定需要编译的文件范围:

  • 如果你的tsconfig.json没有明确把example目录加入exclude列表,或者include规则写得太宽泛(比如["**/*.ts"]),TypeScript会默认扫描根目录下所有符合规则的.ts文件,自然就会扫到example里的示例代码。
  • 虽然你的src/index.ts完全没有引用example的内容,但TypeScript在编译阶段会尝试解析所有被扫描到的文件,当example目录下的node_modules被破坏后,它依赖的gl-matrix/types.d.ts找不到,就直接抛出了错误。
  • 另外你当前的rollup-plugin-typescript3配置里,只排除了node_modules,没有排除example目录,这也让插件没有过滤掉这部分无关文件。

解决办法

你可以从以下几个角度入手修复:

1. 修正tsconfig.json的排除规则

在tsconfig.json里明确把example目录加入exclude,同时限制include只覆盖src目录:

{
  "include": ["src/**/*"],
  "exclude": ["node_modules", "example", "dist"]
}

2. 在rollup的typescript插件里直接排除example

修改rollup.config.js中rollup-plugin-typescript3的配置,把example目录也加入排除列表:

typescript({ 
  clean: true, 
  rollupCommonJSResolveHack: true, 
  exclude: ['node_modules', 'example/**/*'], // 新增example的排除规则
}),

3. 额外检查node-resolve插件的配置(可选)

虽然这次问题的核心是TypeScript,但你可以确认下@rollup/plugin-node-resolve的resolveOnly选项,限制它只解析src目录和项目根的node_modules,避免意外扫描到example里的依赖:

resolve({
  resolveOnly: ['src/**/*', /^@?[a-zA-Z0-9-]+$/], // 只解析src和第三方包
}),

这样调整后,Rollup就只会专注处理src目录下的代码,不会再被example里的文件干扰了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:42:33