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

Rollup 条件编译:如何实现排除文件内指定代码行而非整个文件?

Rollup 行级条件编译实现方案

完全可以实现你需要的仅剔除指定代码行的需求,目前有两种成熟的常用方案:

方案1:@rollup/plugin-replace + Terser 死代码剔除(最通用)

这个方案不需要特殊语法,依托Rollup官方插件和压缩工具的默认能力即可实现:

  • 第一步:安装官方替换插件 @rollup/plugin-replace 和压缩插件 @rollup/plugin-terser
  • 第二步:在rollup配置中配置全局常量替换,示例配置如下:
import replace from '@rollup/plugin-replace';
import terser from '@rollup/plugin-terser';

export default {
  // 其他配置省略
  plugins: [
    replace({
      // 打包时把所有 process.env.DEBUG 替换为你指定的布尔值
      'process.env.DEBUG': JSON.stringify(process.env.NODE_ENV === 'development'),
      preventAssignment: true
    }),
    // 压缩插件默认开启死代码剔除能力
    terser()
  ]
}
  • 第三步:业务代码中直接用常规if判断包裹条件代码块即可:
if (process.env.DEBUG) {
  // 仅调试模式保留的代码
  console.log('调试信息')
  debugReport()
} else {
  // 仅生产模式保留的代码
  initErrorMonitor()
}

打包时Terser会自动识别永远不会执行的代码块直接删除,最终产物里不会包含被剔除的代码行。

方案2:rollup-plugin-preprocess 预处理指令(类C#语法)

如果你更习惯C#风格的预处理指令语法,可以用这个第三方插件实现完全一致的写法:

  • 第一步:安装插件 rollup-plugin-preprocess
  • 第二步:在rollup配置中配置预定义变量:
import preprocess from 'rollup-plugin-preprocess';

export default {
  // 其他配置省略
  plugins: [
    preprocess({
      context: {
        _DEBUG: process.env.NODE_ENV === 'development'
      }
    })
  ]
}
  • 第三步:业务代码中用注释包裹预处理块即可:
/* @ifdef _DEBUG */
console.log('调试信息')
debugReport()
/* @else */
initErrorMonitor()
/* @endif */

打包时插件会直接根据你配置的变量值删除对应代码块,不需要依赖压缩工具,更灵活。

注意:两种方案都不会剔除整个文件,只会针对你标记的代码块做行级的增删,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:57:02