(Ionic 2) 尝试回退到 Cordova-lib 执行时出错:TypeError: 无法读取未定义的属性 'then'。

7

编辑:这是在使用ionic 2时发生的。我知道它还不稳定,但我认为可能有一些解决方法,因为似乎其他人没有遇到这个问题。编辑结束

出于某种原因,当我尝试构建我的ionic应用程序时,无论是使用“ionic build android”还是“ionic build ios”,我突然开始遇到此错误:

An Error occurred trying to fall back to Cordova-lib execution: TypeError: Cannot read property 'then' of undefined
at Object.IonicTask.runCordova (/usr/local/lib/node_modules/ionic/lib/ionic/cordova.js:262:21)
at /usr/local/lib/node_modules/ionic/lib/ionic/cordova.js:142:19
at _fulfilled (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:787:54)
at self.promiseDispatch.done (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:816:30)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:749:13)
at /usr/local/lib/node_modules/ionic/node_modules/q/q.js:557:44
at flush (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:108:17)
at doNTCallback0 (node.js:430:9)
at process._tickCallback (node.js:359:13)

Error happened [TypeError: Cannot read property 'then' of undefined]
    TypeError: Cannot read property 'then' of undefined
at Object.IonicTask.runCordova (/usr/local/lib/node_modules/ionic/lib/ionic/cordova.js:262:21)
at /usr/local/lib/node_modules/ionic/lib/ionic/cordova.js:142:19
at _fulfilled (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:787:54)
at self.promiseDispatch.done (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:816:30)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:749:13)
at /usr/local/lib/node_modules/ionic/node_modules/q/q.js:557:44
at flush (/usr/local/lib/node_modules/ionic/node_modules/q/q.js:108:17)
at doNTCallback0 (node.js:430:9)
at process._tickCallback (node.js:359:13)

我很困惑,不知道从哪里开始查找。

有没有人遇到过这种情况,能指引我正确的方向?


我已经尝试重新安装Ionic和Cordova,但没有成功。如果我以管理员身份(sudo)运行ionic build android,则可以构建Android和iOS。问题是每次想要对它们进行任何操作时都需要chmod/chown构建输出。例如,在Xcode中打开iOS项目。因此,似乎这是一个权限问题 - 我只是不知道哪些文件/文件夹需要给予正确的权限。 - larschla
请问您使用的操作系统是什么?@larschla - Anil kumar
以上错误似乎只存在于您的项目中,而不是库中。我很确定,您能否做一件事,请创建一个示例项目并尝试使用“ionic build android”或“ionic build ios @larschla”。 - Anil kumar
@Anilkumar:我刚刚做了。 ionic start testapp 然后我进入testapp文件夹,运行ionic build ios。和之前一样的错误。 - larschla
让我们在聊天中继续这个讨论 - Anil kumar
显示剩余4条评论
4个回答

6

@mabs @mgcdanny

我相信我已经找到了问题的根本原因。我运行了cordova -v,看到了以下输出 -

Ross-MBP:test rossmartin$ cordova -v
/usr/local/lib/node_modules/cordova/node_modules/update-notifier/node_modules/configstore/index.js:53
                throw err;
                ^

Error: EACCES: permission denied, open '/Users/rossmartin/.config/configstore/update-notifier-cordova.json'
You don't have access to this file.

我随后运行了。
Ross-MBP:test rossmartin$ sudo chown -R rossmartin ~/.config
Ross-MBP:test rossmartin$ cordova -v
6.0.0

现在我看到cordova报告它已经升级到6.0.0并可以再次运行ionic build/prepare。
我认为发生的情况是Ionic CLI没有意识到cordova CLI已安装。也许Ionic CLI在某个地方执行了cordova -v命令,由于权限问题读取~/.config/configstore/update-notifier-cordova.json文件而被卡住了。

相同的配置(El Capitan),黑屏超过4个小时。问题已解决。谢谢! - l_r
这对我也是解决方法。谢谢! - Shane Church

5

我在Ubuntu上遇到了同样的问题。

我需要安装一些依赖项。

首先是cordova,使用以下命令安装:

npm install -g cordova
http://developer.android.com/sdk/index.html提供了Android SDK。同时还需要Java SDK。

在 Windows 上也一样。对我来说,npm install -g cordova 解决了问题。 - Arno van Oordt
我现在只是得到了“throw new TypeError('invalid data');”。 - Rambatino

3

全局卸载(如有必要,请使用sudo)

sudo npm uninstall -g ionic
sudo npm uninstall -g ionic@beta
sudo npm uninstall -g cordova

按照以下方式修复权限:https://docs.npmjs.com/getting-started/fixing-npm-permissions

对我来说,这个方法很有效:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

重新安装 (无需sudo)
npm install -g ionic
npm install -g ionic@beta

谢谢。我按照你说的做了,但是我仍然遇到了同样的问题。还是同样的错误信息 :/ - larschla
我还需要运行:npm install cordova。此外,我遇到了一个权限错误,我通过Anand在这里的答案解决了这个问题:https://dev59.com/7VsX5IYBdhLWcg3wcPGw。 - Dave

0

构建过程正在寻找Cordova-lib,但未找到。这通常是因为您未安装Cordoval-CLI引起的。

要检查是否已安装cordova-CLI,请键入$ ionic info检查结果。如果您看到Cordova CLI: Not installed运行 npm install -g cordova@4.2.0 $ ionic info > 它应该显示Cordova CLI: 4.2.0


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