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

如何阻止Rollup为导出名称添加`$1`后缀?

如何阻止Rollup为导出名称添加$1后缀?

嘿,我来帮你捋捋这个问题!Rollup给你的导出名称加上$1后缀,大概率是因为它检测到这些变量名(C、E、Is、CFunc)和全局作用域里的某个标识重名了——哪怕你自己没觉得这些名称是全局的,也有可能是代码里的某些写法让Rollup产生了误判,或是你不小心把这些变量挂载到了全局对象(比如window)上。

给你几个具体的解决方向,你可以挨个排查尝试:

1. 先检查代码里的全局挂载操作

去看看src/globals/js和src/prop/func.js里的变量声明,是不是有类似window.C = C或者globalThis.E = E这类把变量绑定到全局的代码?如果有的话,Rollup会认为你既要把这个变量放到全局环境,又要作为模块导出,为了避免两者冲突,就会给导出的版本加上$1后缀。
如果确实有全局挂载的需求,你可以把全局挂载的变量名和导出的变量名做区分,或者用Rollup插件来处理全局变量绑定,而非直接在代码里赋值。

2. 排查Rollup配置里的插件设置

打开你的rollup.config.mjs,看看有没有用到@rollup/plugin-inject或者其他和全局变量相关的插件。如果有,仔细检查插件的配置项,是不是不小心把C、E这些自定义变量当成了需要注入的全局依赖?比如要是inject插件的配置里把这些变量列在了全局相关的选项中,Rollup会把它们当成外部全局变量,打包时为了避免冲突就会重命名导出的同名变量。
如果是这个问题,把这些变量从插件的全局配置项里移除即可。

3. 显式指定Rollup的导出行为

在Rollup配置的output选项里,确保设置了exports: 'named',这能让Rollup严格按照你定义的命名规则处理导出,减少自动重命名的概率。另外,如果你没有外部依赖,记得把external选项留空,别把这些自定义变量加到external列表里——不然Rollup会把它们当成外部模块,也可能触发重命名逻辑。

4. 用命名空间包裹导出(兜底方案)

要是上面的方法都没解决问题,或者你想彻底规避这类命名冲突,你可以把这些导出变量放到一个命名空间对象里,比如在入口文件里这样写:

import { C, E, Is } from './globals/js';
import { CFunc } from './prop/func';

export const RAF = { C, E, Is, CFunc };

这样用户导入时就会用import { RAF } from 'your-library',通过RAF.C这类方式使用变量,从根源上避免和全局变量的冲突,自然也就不会出现$1后缀的问题了。当然你也可以选择不这么做,毕竟你提到导入方可以自己包裹或别名,但这个方法能从你的库本身彻底解决冲突隐患。

你可以先从检查代码里的全局挂载操作开始排查,这是触发Rollup自动重命名最常见的原因,再逐步看配置里的插件设置,应该就能找到问题所在啦!

备注:内容来源于stack exchange,提问作者Sideways S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:03:09