Rollup将自定义const变量识别为全局变量并添加$1后缀,咨询相关变量是否为JS全局变量及文档来源
Rollup将自定义const变量识别为全局变量并添加$1后缀,咨询相关变量是否为JS全局变量及文档来源
放心,C、E、Is、CFunc绝对不是标准JavaScript的全局变量——不管是ECMAScript官方标准,还是MDN收录的浏览器、Node.js全局对象里,都找不到这些标识符的身影。
出现这种情况,大概率是Rollup的作用域分析或者tree-shaking机制误判了,常见原因有这几个:
- 你的项目里某个第三方依赖、编译插件(比如Babel相关插件、代码压缩插件)的内部逻辑里用到了这些变量名,和你的自定义变量撞了;
- 你可能不小心把这些变量暴露到了全局作用域(比如在浏览器环境下没做模块包裹,变量默认挂载到
window上),Rollup检测后误以为是外部全局变量,于是重命名避免冲突。
给你几个解决思路:
- 先检查Rollup配置文件,看看有没有在
globals选项里误把这些变量标记成了全局外部变量; - 如果是Rollup的误判,可以在变量定义的地方加上
/*#__PURE__*/注释,明确告诉Rollup这是纯内部变量,不需要做全局冲突处理;也可以在Rollup配置的external选项里排除这些变量,让Rollup把它们当作内部模块变量处理; - 排查一下项目依赖,看看有没有哪个第三方库偷偷在全局注入了这些奇怪的变量名。
如果最后确认没有实际的全局冲突,只是Rollup的误判,完全不需要修改你的变量名或者加命名空间,调整配置就能解决问题。
备注:内容来源于stack exchange,提问作者Sideways S
相关产品推荐
相关产品推荐

