在使用 Rollup 打包为 ESM(ECMAScript 模块)时,如果遇到 React is not defined
的错误,通常是因为 Rollup 没有正确处理 React 的导入。以下是一些基础概念和相关解决方案:
import
和 export
关键字。在你的入口文件或需要使用 React 的文件中,确保有以下导入语句:
import React from 'react';
import ReactDOM from 'react-dom';
你需要使用 @rollup/plugin-node-resolve
和 @rollup/plugin-commonjs
插件来处理 CommonJS 模块,并确保 Rollup 能够找到 React 和 ReactDOM。
以下是一个基本的 Rollup 配置示例:
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import babel from '@rollup/plugin-babel';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
plugins: [
resolve(),
commonjs(),
babel({ babelHelpers: 'bundled' }),
],
};
确保你已经安装并配置了 Babel,以便正确转译 React 代码。你可以使用 @rollup/plugin-babel
插件。
安装必要的依赖:
npm install --save-dev @rollup/plugin-babel @babel/core @babel/preset-react
然后在你的 Babel 配置文件(例如 .babelrc
)中添加 React 预设:
{
"presets": ["@babel/preset-react"]
}
假设你有一个简单的 React 组件:
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
function App() {
return <h1>Hello, World!</h1>;
}
ReactDOM.render(<App />, document.getElementById('root'));
确保你的 Rollup 配置如上所示,并且所有必要的插件都已正确安装和配置。
这种配置适用于需要将 React 应用程序打包为 ESM 模块的场景,例如构建库或需要在现代浏览器中直接使用的应用程序。
通过以上步骤,你应该能够解决 React is not defined
的问题,并成功使用 Rollup 打包你的 React 应用程序为 ESM 格式。
领取专属 10元无门槛券
手把手带您无忧上云