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

从CRA迁移至Vite遇报错:Uncaught TypeError: 无法确定当前Node版本

React项目从CRA迁移至Vite后空白页及Node版本判断错误的解决

问题描述

将React项目从CRA迁移到Vite后,运行项目出现空白页面,控制台抛出以下错误:

Uncaught TypeError: Unable to determine current node version
    at versionIncluded (index.js:51:9)
    at isCore (index.js:68:28)
    at node_modules/resolve/lib/core.js (core.js:9:21)
    at __require2 (chunk-LK32TJAX.js?v=b6f66255:18:50)
    at node_modules/resolve/index.js (index.js:2:14)
    at __require2 (chunk-LK32TJAX.js?v=b6f66255:18:50)
    at node_modules/babel-plugin-macros/dist/index.js (index.js:5:17)
    at __require2 (chunk-LK32TJAX.js?v=b6f66255:18:50)
    at index.js:43:1

当前使用的Vite配置:

import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
import svgrPlugin from "vite-plugin-svgr";
import envCompatible from "vite-plugin-env-compatible";

// https://vitejs.dev/config/
export default defineConfig({
  envPrefix: "REACT_APP_",
  build: {
    outDir: "build",
  },
  resolve: {
    alias: {
      src: "/src",
    },
  },
  plugins: [react(), envCompatible()],
});

已尝试更新依赖、升级npm和Node版本,问题仍未解决。

解决方案

这个错误的核心原因是resolve包原本用于Node.js环境,在浏览器中无法获取Node版本信息,而babel-plugin-macros依赖了该包,Vite开发模式下误将其打包进浏览器环境导致报错。可通过以下方式解决:

方案1:优化Vite配置,外部化相关Node端包

修改Vite配置,在依赖预构建和打包阶段排除相关Node端依赖:

import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
import svgrPlugin from "vite-plugin-svgr";
import envCompatible from "vite-plugin-env-compatible";

export default defineConfig({
  envPrefix: "REACT_APP_",
  build: {
    outDir: "build",
    rollupOptions: {
      external: ["resolve", "babel-plugin-macros"],
    },
  },
  resolve: {
    alias: {
      src: "/src",
    },
  },
  optimizeDeps: {
    exclude: ["resolve", "babel-plugin-macros"],
  },
  plugins: [react(), envCompatible()],
});

方案2:添加Node环境模拟插件

安装rollup-plugin-node-polyfills来模拟浏览器缺失的Node环境变量:

  1. 安装依赖:
npm install rollup-plugin-node-polyfills --save-dev
  1. 修改Vite配置:
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
import svgrPlugin from "vite-plugin-svgr";
import envCompatible from "vite-plugin-env-compatible";
import nodePolyfills from "rollup-plugin-node-polyfills";

export default defineConfig({
  envPrefix: "REACT_APP_",
  build: {
    outDir: "build",
    rollupOptions: {
      plugins: [nodePolyfills()],
    },
  },
  resolve: {
    alias: {
      src: "/src",
    },
  },
  plugins: [react(), envCompatible()],
});

方案3:检查依赖兼容性

排查项目中依赖babel-plugin-macros的第三方库(如styled-components、emotion等),确认其版本是否适配Vite,如有需要升级到兼容Vite的版本。

额外步骤

删除node_modules、package-lock.json(或yarn.lock),重新执行npm install,确保依赖安装干净。

内容的提问来源于stack exchange,提问作者I am Live

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:40:13