Android运行Cordova+React应用时GLOBAL is not defined错误解决
问题描述
我按照教程搭建了Cordova+React应用,使用cordova run android -- --livereload命令在安卓真机运行时,应用未编译也未推送至设备,仅输出:
cordova run android -- --livereload Successfully built! GLOBAL is not defined
详细报错输出:
GLOBAL is not defined ReferenceError: GLOBAL is not defined at Object.isLiveReloadActivated (/Users/ivan/Desktop/MasterThesis/Test2/cordovaReact/plugins/cordova-plugin-livereload/lib/utils/helpers.js:94:5) at Object.module.exports.isLiveReloadActive (/Users/ivan/Desktop/MasterThesis/Test2/cordovaReact/plugins/cordova-plugin-livereload/lib/index.js:21:17) at module.exports (/Users/ivan/Desktop/MasterThesis/Test2/cordovaReact/plugins/cordova-plugin-livereload/lib/postEmulateRunHook.js:19:13) at runScriptViaModuleLoader (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:157:32) at runScript (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:136:12) at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:108:40 at processTicksAndRejections (internal/process/task_queues.js:95:5)
请问GLOBAL是什么?如何修复该错误以实现应用编译和热重载?
问题解答
1. GLOBAL是什么?
GLOBAL是旧版Node.js里用来表示全局对象的标识符,Node.js v12及之后的版本已经用globalThis替代了它。但你用的cordova-plugin-livereload插件比较老旧,还在使用这个过时的标识符,导致在新版Node环境下运行时抛出未定义的错误。
2. 修复方法
方法一:临时全局定义GLOBAL
在项目根目录创建hook-pre.js文件,内容如下:
global.GLOBAL = globalThis;
然后修改项目根目录的config.xml,添加前置钩子:
<hook src="hook-pre.js" type="before_run" />
这样Cordova执行钩子前会先定义GLOBAL,兼容旧插件的写法。
方法二:修改插件代码替换GLOBAL
直接修改报错的插件文件:
- 打开路径
/Users/ivan/Desktop/MasterThesis/Test2/cordovaReact/plugins/cordova-plugin-livereload/lib/utils/helpers.js - 找到第94行的
GLOBAL,替换为globalThis - 保存后重新执行
cordova run android -- --livereload
方法三:降级Node.js版本
如果不想改代码,可以用nvm等工具把Node.js降级到v12或更低版本,旧版本Node仍支持GLOBAL,能正常运行该插件。
方法四:更换兼容的热重载插件
移除旧插件,改用官方推荐的cordova-plugin-browsersync,它对新版Node.js兼容性更好:
cordova plugin remove cordova-plugin-livereload cordova plugin add cordova-plugin-browsersync
之后用cordova run android -- --live-reload启动热重载(注意参数是--live-reload)
内容的提问来源于stack exchange,提问作者IvanHid
相关产品推荐
相关产品推荐

