在 macOS 12(Monterey)中,Ionic 构建失败。

28

在我更新的macOS 12 (Monterey)上运行"ionic cordova build ios"时,我遇到了这个错误:

Uncaught Exception:
TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
at macosRelease (/Applications/XXX.app/Contents/Resources/app.asar/node_modules/macos-release/index.js:26:26)
at Object.<anonymous> (/Applications/XXX.app/Contents/Resources/app.asar/main/utils/errors.js:54:17)
at Module._compile (internal/modules/cjs/loader.js:968:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:986:10)
at Module.load (internal/modules/cjs/loader.js:816:32)
at Module._load (internal/modules/cjs/loader.js:728:14)
at Module._load (electron/js2c/asar.js:717:26)
at Function.Module._load (electron/js2c/asar.js:717:26)
at Module.require (internal/modules/cjs/loader.js:853:19)
at require (internal/modules/cjs/helpers.js:74:18)
11个回答

41

像这样编辑nameMap

const nameMap = new Map([
    [21, ['Monterey', '12']],
    [20, ['Big Sur', '11']],
    [19, ['Catalina', '10.15']],
    [18, ['Mojave', '10.14']],
    [17, ['High Sierra', '10.13']],
    [16, ['Sierra', '10.12']],
    [15, ['El Capitan', '10.11']],
    [14, ['Yosemite', '10.10']],
    [13, ['Mavericks', '10.9']],
    [12, ['Mountain Lion', '10.8']],
    [11, ['Lion', '10.7']],
    [10, ['Snow Leopard', '10.6']],
    [9, ['Leopard', '10.5']],
    [8, ['Tiger', '10.4']],
    [7, ['Panther', '10.3']],
    [6, ['Jaguar', '10.2']],
    [5, ['Puma', '10.1']]
]);

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
1
要找到要编辑的文件,请查看错误调用堆栈的顶部。在这种情况下,是/Applications/XXX.app/Contents/Resources/app.asar/node_modules/macos-release/index.js - Jakub Adamek
有点取巧,但我喜欢! - celwell
3
[22, ['Ventura', '13']],添加Ventura对我有用:)谢谢 - Joe Naber

19

这对我起作用:

npm uninstall -g cordova
npm install -g cordova@10.0.0

对我没用,但 nameMap hack 有帮助。 - Shmarkus
这个对我起作用了。 - Mayur Baldha

16

要解决此问题,只需安装最新的macos-release,使用npm install macos-release@3.0.1 --save命令即可定义MacOS 12(Monterey)。


它对我有效,谢谢@frankyt79 - Shashikant Yadav
最终这个对我起作用了。 - Chamupathi Gigara Hettige
这样做就可以了。但在此之前,我不得不更改权限(即使我是管理员)。这篇简短的文章解决了这个问题... https://www.dailytask.co/task/error-eacces-permission-denied-rename-usrlocallibnodemodulescdk8s-clinodemodulescliui-ahmed-zidan - Joe Hakooz

10

在挖掘“macos-release”库的源代码后,我发现该数组中不存在“Monterey”版本,这就是问题的原因:

const nameMap = new Map([
    [20, ['Big Sur', '11']],
    [19, ['Catalina', '10.15']],
    [18, ['Mojave', '10.14']],
    [17, ['High Sierra', '10.13']],
    [16, ['Sierra', '10.12']],
    [15, ['El Capitan', '10.11']],
    [14, ['Yosemite', '10.10']],
    [13, ['Mavericks', '10.9']],
    [12, ['Mountain Lion', '10.8']],
    [11, ['Lion', '10.7']],
    [10, ['Snow Leopard', '10.6']],
    [9, ['Leopard', '10.5']],
    [8, ['Tiger', '10.4']],
    [7, ['Panther', '10.3']],
    [6, ['Jaguar', '10.2']],
    [5, ['Puma', '10.1']]
]);

这个名为“macos-release”的库是“cordova”:“^9.0.0”的依赖项,所以对我有用的解决方法是从我的package.json文件中删除这个库,删除“node-modules”文件夹并重新安装所有依赖项。

另一种解决方法是升级到cordova 10.0.0。


9

如果您已经升级到Ventura,您还需要添加以下内容:

[22, ['Ventura', '13']],

那么它将会像这样;

const nameMap = new Map([
    [22, ['Ventura', '13']],
    [21, ['Monterey', '12']],
    [20, ['Big Sur', '11']],
    [19, ['Catalina', '10.15']],
    [18, ['Mojave', '10.14']],
    [17, ['High Sierra', '10.13']],
    [16, ['Sierra', '10.12']],
    [15, ['El Capitan', '10.11']],
    [14, ['Yosemite', '10.10']],
    [13, ['Mavericks', '10.9']],
    [12, ['Mountain Lion', '10.8']],
    [11, ['Lion', '10.7']],
    [10, ['Snow Leopard', '10.6']],
    [9, ['Leopard', '10.5']],
    [8, ['Tiger', '10.4']],
    [7, ['Panther', '10.3']],
    [6, ['Jaguar', '10.2']],
    [5, ['Puma', '10.1']]
]);

如果您不知道自己的版本,请在函数 const macosRelease = release => {... 中尝试console.log(release);

5

当我更新我的macOS到Ventura(13)时,我开始遇到问题。因此,只是简单地在HashMap中添加了操作系统名称版本,而没有更新任何内容。

const nameMap = new Map([
    [21, ['Ventura', '13']],
    [20, ['Big Sur', '11']],
    [19, ['Catalina', '10.15']],
    [18, ['Mojave', '10.14']],
    [17, ['High Sierra', '10.13']],
    [16, ['Sierra', '10.12']],
    [15, ['El Capitan', '10.11']],
    [14, ['Yosemite', '10.10']],
    [13, ['Mavericks', '10.9']],
    [12, ['Mountain Lion', '10.8']],
    [11, ['Lion', '10.7']],
    [10, ['Snow Leopard', '10.6']],
    [9, ['Leopard', '10.5']],
    [8, ['Tiger', '10.4']],
    [7, ['Panther', '10.3']],
    [6, ['Jaguar', '10.2']],
    [5, ['Puma', '10.1']]
]);

2

在我的情况下,我也遇到了相同的错误,但问题是我完全没有安装Cordova(我正在新机器上处理旧的Ionic 3项目,甚至没有想过没有安装Cordova)

因此,首先检查是否安装了Cordova

npm list -g cordova
npm list cordova

如果没有安装,就安装它:
npm install cordova

1
如果将macOS版本附加到app-release仍无法解决您的问题,那么您可以考虑全局卸载cordova并重新安装。
npm uninstall -g cordova
npm install -g cordova

如有需要,请使用sudo


0
进入 node_modules/macos-release/index.js 文件,
并将 [21, ['Monterey', '12']], 添加到 nameMap 中。

0

我刚刚打开了一个新的终端选项卡,然后"ionic info"开始工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接