React v16项目配置ol-cesium所需Webpack别名的问题求助
解决React + create-react-app集成ol-cesium时的
export 'getUid'错误 这个错误的核心原因是ol-cesium依赖Google Closure Library的goog模块,但Webpack默认无法定位到该模块的路径,所以需要手动配置Webpack别名。由于create-react-app默认隐藏了Webpack配置,下面给你两种可行的解决方案:
方案1:使用react-app-rewired(推荐,无需弹出配置)
这种方式不需要修改create-react-app的核心配置,更安全且可逆:
- 首先安装必要的工具依赖:
npm install react-app-rewired customize-cra --save-dev - 在项目根目录创建
config-overrides.js文件,写入以下配置:const path = require('path'); const { override, addWebpackAlias } = require('customize-cra'); module.exports = override( addWebpackAlias({ // 指向ol依赖的closure-library中的goog目录 'goog': path.resolve(__dirname, 'node_modules/ol/node_modules/closure-library/closure/goog') }) ); - 修改
package.json中的scripts命令,替换为react-app-rewired执行:"scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test", "eject": "react-scripts eject" } - 重启你的开发服务器:
npm start,此时应该就能正常加载ol-cesium模块了。
方案2:弹出create-react-app配置(不推荐,不可逆)
如果你可以接受不可逆的弹出操作,可以直接修改Webpack配置:
- 执行弹出命令:
注意:这个操作会把所有隐藏的配置文件暴露出来,之后无法恢复到默认的隐式配置状态。npm run eject - 找到项目根目录下的
config/webpack.config.js,定位到resolve.alias配置段,添加goog的别名:resolve: { alias: { // 保留原有别名,新增以下配置 'goog': path.resolve(__dirname, '../node_modules/ol/node_modules/closure-library/closure/goog') }, // 其他原有配置... } - 保存文件后重启开发服务器,错误即可解决。
补充说明:ol内部依赖了closure-library,ol-cesium需要直接引用goog模块的方法,通过配置别名让Webpack能正确找到该模块的路径,从而解决导出错误问题。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

