You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

直接修改报错的插件文件:

  1. 打开路径/Users/ivan/Desktop/MasterThesis/Test2/cordovaReact/plugins/cordova-plugin-livereload/lib/utils/helpers.js
  2. 找到第94行的GLOBAL,替换为globalThis
  3. 保存后重新执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:00:59