Svelte项目Rollup构建时@rollup/plugin-strip未移除console.log问题
问题根因与修复方案
核心问题是@rollup/plugin-strip的执行顺序错误,匹配规则无法命中编译后的文件:
- 当前配置里strip插件放在了svelte编译、babel转译流程之后,此时所有.svelte单文件已经被编译为普通js代码,strip配置里的
.svelte后缀匹配规则已经失效,导致svelte组件内的console.log没有被处理。 - 部分经过babel转译后的代码结构变化,也可能导致strip无法识别到console.log语句。
修复步骤
- 调整strip插件的执行顺序,将strip移动到svelte编译之前执行,优先处理.svelte单文件内的console语句,plugins顺序调整如下:
plugins: [ production && del({ targets: [fulloutputdir+'*'] }), json(), alias({ // 原有alias配置保持不变 }), replace({ // 原有replace配置保持不变 }), // strip移到svelte编译之前 production && strip({ include: '**/*.(mjs|js|svelte)', functions: ['console.log', 'assert.*', 'debug', 'alert'], }), svelte({ // 原有svelte配置保持不变 }), // 后续postcss、resolve、commonjs等插件保持原有顺序不变 ]
- 新增terser删除console配置,做双重保险,即使strip有遗漏,代码压缩阶段也会清理console.log,修改terser配置为:
production && terser({ compress: { drop_console: true, drop_debugger: true } }),
- 若存在写在svelte template插值中的console.log,需要额外调整代码逻辑移除,不要在模板内写入console相关语句。
验证方式
修改配置后重新执行生产构建,打开构建输出的js文件搜索console.log,确认无匹配结果即可。
内容的提问来源于stack exchange,提问作者Romeo Zet
相关产品推荐
相关产品推荐

