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

在metro.config.js中配置drop_console无法移除生产构建的console.log

解决Expo生产构建中console.log无法移除的问题

问题根源

你直接赋值config.transformer.minifierConfig会覆盖掉getSentryExpoConfig生成的原有minifier配置,导致metro的压缩规则没有正确应用。

修复metro.config.js配置

修改minifierConfig的赋值逻辑,用扩展运算符合并原有配置,而不是完全替换:

const { getSentryExpoConfig } = require('@sentry/react-native/metro');

module.exports = (() => {
  const config = getSentryExpoConfig(__dirname);
  const { transformer, resolver } = config;

  config.transformer = {
    ...transformer,
    babelTransformerPath: require.resolve("react-native-svg-transformer"),
    // 合并原有minifier配置,添加drop_console
    minifierConfig: {
      ...transformer.minifierConfig,
      compress: {
        ...(transformer.minifierConfig?.compress || {}),
        drop_console: true,
      },
    },
  };

  config.resolver = {
    ...resolver,
    assetExts: resolver.assetExts.filter((ext) => ext !== "svg"),
    sourceExts: [...resolver.sourceExts, "svg"],
  };

  return config;
})();

更可靠的替代方案:使用Babel插件

如果上述方法仍不生效,可以用babel-plugin-transform-remove-console直接在编译阶段移除console语句,这种方式不受metro配置影响:

  1. 安装插件:
npm install babel-plugin-transform-remove-console --save-dev
# 或
yarn add babel-plugin-transform-remove-console --dev
  1. 修改babel.config.js,仅在生产环境启用:
module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: [
      // 只有生产环境才移除console
      process.env.NODE_ENV === 'production' && 'transform-remove-console',
    ].filter(Boolean),
  };
};

额外检查点

  • 确认EAS构建时使用的是production环境,在eas.json中确保构建配置的env设置为production
  • 清理构建缓存后重新构建:运行npx expo prebuild --clean或在EAS构建时勾选清理缓存选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:47:12