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

Vite React生产构建部署后报Invalid or unexpected token错误求助

CRA迁移Vite后生产环境1.toString()报错问题排查方案

核心原因

1.toString()本身是JavaScript非法语法(.会被解析为小数点),正确写法应为(1).toString()或1..toString()。生产环境出现该代码,大概率是Vite打包时的压缩/混淆逻辑,或是第三方依赖转译异常导致。

分步排查与解决

  • 调整Terser压缩配置
    Vite默认用Terser做生产压缩,部分压缩规则可能把合法代码转成非法格式。在vite.config.js里显式配置Terser,先禁用可能触发问题的选项:

    import { defineConfig } from 'vite';
    import react from '@vitejs/plugin-react';
    
    export default defineConfig({
      plugins: [react()],
      build: {
        minify: 'terser',
        terserOptions: {
          compress: {
            reduce_vars: false,
            sequences: false
          },
          mangle: false // 先关闭混淆验证问题来源
        }
      }
    });
    

    重新打包部署,若问题消失,再逐步开启选项定位具体触发项。

  • 排查第三方依赖转译
    Vite对依赖的转译策略和CRA不同,部分未做ES兼容的依赖可能被错误转译。通过浏览器报错栈定位到涉事依赖后,在配置里强制Vite转译它:

    export default defineConfig({
      optimizeDeps: {
        include: ['涉事依赖包名']
      },
      build: {
        commonjsOptions: {
          include: [/涉事依赖包名/, /node_modules/]
        }
      }
    });
    
  • 核对环境变量差异
    生产环境的import.meta.env变量(如NODE_ENV)可能触发特定代码分支,导致生成非法代码。确认生产环境变量和预发布环境一致,排除逻辑分支差异。

  • 格式化打包产物检查
    把生产打包后的代码用Prettier格式化,仔细搜索是否存在1.toString()或压缩后的变体——有时候压缩后的代码合并成一行,肉眼难以直接识别。

临时应急方案

若需快速修复,可临时关闭Vite的代码压缩:

export default defineConfig({
  build: {
    minify: false
  }
});

注意这只是临时方案,长期仍需定位根源解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:20