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

Cordova入门第二步创建项目失败,报ReferenceError: globalThis is not defined问题求助

Cordova create命令报错ReferenceError: globalThis is not defined(Node.js v11.15.0环境下无需升级版本的解决办法)

问题描述

我正在遵循Cordova的《快速入门指南》,但在第二步就遇到了阻碍。当我执行cordova create myApp命令创建项目时,操作失败并抛出以下错误信息:

C:\Users\foobar\AppData\Roaming\npm\node_modules\cordova\node_modules\queue-microtask\index.js:5
? queueMicrotask.bind(globalThis)
^
ReferenceError: globalThis is not defined
at Object.<anonymous> (C:\Users\foobar\AppData\Roaming\npm\node_modules\cordova\node_modules\queue-microtask\index.js:5:25)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
at Module.load (internal/modules/cjs/loader.js:685:32)
at Function.Module._load (internal/modules/cjs/loader.js:620:12)
at Module.require (internal/modules/cjs/loader.js:723:19)
at require (internal/modules/cjs/helpers.js:14:16)
at Object.<anonymous> (C:\Users\foobar\AppData\Roaming\npm\node_modules\cordova\node_modules\run-parallel\index.js:4:24)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)

我猜测这可能是Node.js或npm版本问题,但由于担心破坏其他项目,我不想更换Node.js/npm版本。当前我的版本信息如下:

  • node --version:v11.15.0
  • npm --version:6.7.0

希望能获取无需更换Node.js/npm版本的解决办法。


解决方案

这个问题的根源是:你当前安装的Cordova版本依赖的queue-microtask包使用了globalThis对象,而globalThis是Node.js v12.0.0及以上版本才支持的特性,你的Node.js v11.15.0不兼容这个API。下面是两个无需升级Node.js的解决办法:

方法1:降级Cordova CLI到兼容版本

最稳妥的方式是安装一个兼容Node.js v11的Cordova版本,比如v9.x系列(该版本明确支持Node.js v10+):

# 先卸载全局的Cordova
npm uninstall -g cordova
# 安装指定的旧版本
npm install -g cordova@9.0.0

安装完成后,重新执行cordova create myApp,就能正常创建项目了。

方法2:手动修改依赖包代码(临时修复)

如果你不想降级Cordova,可以手动修改报错的queue-microtask模块代码,替换不兼容的globalThis:

  1. 找到报错文件路径:C:\Users\foobar\AppData\Roaming\npm\node_modules\cordova\node_modules\queue-microtask\index.js
  2. 打开文件后,将第5行的代码:
    queueMicrotask.bind(globalThis)
    
    替换为兼容旧Node.js的写法:
    queueMicrotask.bind(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : {})
    
    (在Node.js环境下,直接写queueMicrotask.bind(global)也能正常工作)
  3. 保存文件后,重新运行cordova create myApp命令即可。

注意:这种方法是临时修复,后续如果更新Cordova或其依赖包,修改的代码会被覆盖,所以更推荐方法1。


内容的提问来源于stack exchange,提问作者user3700562

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:47:41