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

使用Rollup.js + React 18时出现'Uncaught ReferenceError: React is not defined'错误

React未定义错误:Rollup.js集成React失败排查

Chrome控制台报错:

index.tsx:13 Uncaught ReferenceError: React is not defined
    at index.tsx:13:2

之前用Rollup.js开发过大型纯JS应用,现在想集成React,但遇到问题——代码编译无报错,但浏览器无法运行。搜了大量相关内容,所有建议都无效,求解决。

编译命令

rollup -c -w

Rollup编译输出

rollup v3.6.0
bundles src/ts/index.tsx → resources/public/js/bundle.js...
LiveReload enabled
created resources/public/js/bundle.js in 1.1s

[2023-01-24 01:11:33] waiting for changes...

配置文件与代码

rollup.config.js

import typescript from '@rollup/plugin-typescript';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import livereload from 'rollup-plugin-livereload';
import babel from '@rollup/plugin-babel';

export default {
  input: 'src/ts/index.tsx',
  output: {
    file: 'resources/public/js/bundle.js',
    format: 'iife',
    sourcemap: 'inline',
    inlineDynamicImports: true,
    globals: {
      "react/jsx-runtime":"jsxRuntime",
      "react-dom/client":"ReactDOM",
      "react":"React"},
  },
  external: [ 'react', 'react/jsx-runtime','react-is', 'react-dom/client','react-dom'],
  watch: true,
  plugins: [typescript(),
        nodeResolve(),
        livereload(),
        babel({
          babelHelpers: "bundled",
              exclude: 'node_modules/**',
              presets: [ ["@babel/preset-react", {"runtime": "automatic"}] ]
        })]
};

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "noImplicitAny": true,
    "removeComments": true,
    "checkJs": false,
    "preserveConstEnums": true,
    "sourceMap": true,
  },
  
  "include": ["src"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

index.tsx

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

App.tsx

import React from 'react';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <p>
          Edit <code>src/App.tsx</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:05:24