当前位置:首页 > React

umi是如何暴露react

2026-03-31 13:37:17React

umi 暴露 React 的方式

umi 通过配置 runtimePublicPathchainWebpack 来暴露 React 及其相关库到全局作用域。这样可以避免多个 React 实例共存,确保项目依赖的 React 版本一致。

配置 runtimePublicPath

config/config.js.umirc.js 中设置 runtimePublicPathtrue,确保动态加载的脚本能正确解析 React 路径。

umi是如何暴露react

export default {
  runtimePublicPath: true,
};

通过 chainWebpack 配置

在配置文件中使用 chainWebpack 方法,将 React 和 ReactDOM 暴露为全局变量。

export default {
  chainWebpack(config) {
    config.externals({
      'react': 'window.React',
      'react-dom': 'window.ReactDOM',
    });
  },
};

引入 CDN 资源

在 HTML 中通过 <script> 标签引入 React 和 ReactDOM 的 CDN 资源,确保全局变量可用。

umi是如何暴露react

<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>

使用 webpack 的 ProvidePlugin

通过 chainWebpack 配置 ProvidePlugin,自动注入 React 到模块中。

export default {
  chainWebpack(config) {
    config.plugin('provide').use(webpack.ProvidePlugin, [{
      React: 'react',
    }]);
  },
};

检查依赖版本

确保项目中的 React 版本与 CDN 引入的版本一致,避免版本冲突。

npm ls react

注意事项

  • 避免在项目中直接安装 React 和 ReactDOM,防止多实例问题。
  • 确保 CDN 资源加载顺序正确,ReactDOM 依赖 React 必须先行加载。
  • 在生产环境中使用稳定的 CDN 地址,避免资源加载失败。

通过以上方法,umi 可以有效地将 React 暴露到全局作用域,确保项目正常运行。

标签: umireact
分享给朋友:

相关文章

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何扩展

react如何扩展

扩展 React 项目的常用方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式。通过包裹组件并注入额外属性或逻辑,可以实现功能扩展。例如,一个日志记录的高阶组件: function…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…

react如何减少伤病

react如何减少伤病

减少React应用中的性能问题(避免"伤病") 优化React应用性能需要从组件渲染、状态管理和外部依赖等多方面入手。以下是关键优化策略: 使用React.memo进行组件记忆 对函数组件使用Rea…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…