当您忘记将 [用于 React 库的] 导入指令添加到组件文件时,也会发生这种情况。
例如,假设您有一个具有以下结构的 React 应用程序:
.
+-- index.html
+-- index.js
+-| src
+-- app.js
+-| components
+-- my-component.js
+-| dist
+-- bundle.js
以及以下文件内容:
<!-- index.html -->
<html>
<head>
<title>My React App</title>
</head>
<body>
<div id="root"></div>
<script src="dist/bundle.js"></script>
</body>
</html>
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './src/app';
ReactDOM.render(
<React.StrictMode>
<App/>
</React.StrictMode>,
document.querySelector('#root')
);
// ./src/app.js
import Banner from './components/my-component';
function App() {
return (
<div className="App">
<header className="App-header">
<h1>Hello World</h1>
</header>
<main>
<Banner/>
</main>
</div>
);
}
export default App;
// .src/components/my-component.js
function MyBanner(){
return (
<h3>My Banner!</h3>
);
}
export default MyBanner;
要将您的 React 应用程序与 ESBuild 捆绑在一起,您可能会运行如下内容:
npx esbuild index.js --bundle --loader:.js=jsx --out-file=./dist/bundle.js
注意:如果您的 npm 版本是 5.2.0 或更高版本,您可以使用npx esbuild
代替。./node_modules/.bin/esbuild
构建完成后,您打开index.html
[in the browser],您应该会收到一条错误消息React is not defined
.
原因是在./src/app.js
and./src/components/my-component.js
中,没有 React 的导入指令。因此,在构建过程中转换 JSX 时,React.createElement
当你的包在浏览器中执行时,没有声明和可访问的 React 引用;因此错误。
要解决此问题,请在两个文件的顶部添加导入指令。
import React from 'react';
注意:在使用和不使用 import 指令的情况下运行构建可能会很有用,以查看代码如何随每个构建发生变化。