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

React代码压缩时如何保留JSX注释?

如何在Webpack压缩的生产代码中保留JSX注释?

你遇到的问题其实是因为JSX注释和普通JavaScript注释的处理逻辑不一样——Babel的comments: true选项只负责保留标准JS注释(比如//或/* ... */写在JS代码里的),但JSX里的{/* ... */}属于JSX语法的一部分,默认会被Babel的JSX转换插件移除,哪怕你开了注释保留。

下面是具体的解决步骤:

1. 调整Babel配置,保留JSX注释

修改你的babel-loader配置,显式给@babel/plugin-transform-react-jsx插件添加preserveComments: true参数,强制它保留JSX注释:

{
    test: /\.(js|jsx|mjs)$/,
    exclude: /(node_modules|bower_components)/,
    use: {
        loader: 'babel-loader',
        options: {
            babelrc: false,
            presets: [ require.resolve( 'babel-preset-cgb' ) ],
            cacheDirectory: false,
            comments: true, // 保留标准JS注释
            plugins: [
                // 显式配置JSX插件,保留JSX注释
                [ '@babel/plugin-transform-react-jsx', { preserveComments: true } ]
            ]
        },
    },
}

2. 确认UglifyJsPlugin的配置正确

你当前的Uglify配置已经设置了comments: true和extractComments: false,这部分是对的——只要Babel把注释保留到编译后的JS代码里,Uglify就不会剥离它们。

为什么之前的配置没用?

简单来说:

  • Babel的comments: true不处理JSX注释,只处理普通JS注释
  • 默认情况下,Babel转换JSX时会自动丢弃{/* ... */}这类注释,必须通过preserveComments参数手动开启保留

修改完配置后重新编译,你应该就能在生产压缩代码里看到你的JSX注释了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:21:20