Ios Cordova构建在带有EACCES&;的OS X上失败;埃诺特
我最近开始使用Cordova构建iOS应用程序,我遇到了一个障碍。在安装了nodeJS、git和cordova(使用sudo)之后,我在我的用户帐户的Documents文件夹中创建了我的第一个应用程序 第一次跑得很顺利。一切正常,将我的开发人员帐户添加到Xcode有助于我的应用程序在设备上运行。我决定在Ios Cordova构建在带有EACCES&;的OS X上失败;埃诺特,ios,node.js,macos,cordova,Ios,Node.js,Macos,Cordova,我最近开始使用Cordova构建iOS应用程序,我遇到了一个障碍。在安装了nodeJS、git和cordova(使用sudo)之后,我在我的用户帐户的Documents文件夹中创建了我的第一个应用程序 第一次跑得很顺利。一切正常,将我的开发人员帐户添加到Xcode有助于我的应用程序在设备上运行。我决定在/hooks/before\u prepare文件夹中添加一个名为001_c.js的“before\u prepare”钩子,让事情变得更加有趣。钩子是这样开始的: //This is where
/hooks/before\u prepare文件夹中添加一个名为001_c.js
的“before\u prepare”钩子,让事情变得更加有趣。钩子是这样开始的:
//This is where nodeJS exists
#!/usr/local/bin node
console.log("Changing config");
var fs = require('fs');
var path = require('path');
var rootdir = process.argv[2];
//and so on
当我现在构建应用程序时,出现以下错误:
pc295786:master Kelster$cordova构建ios运行命令:
/用户/kelster/documents/apps/master/hooks/before\u prepare/001\u c.js
/用户/kelster/documents/apps/master错误:spawnEACCES
导出时出现异常(util.js:746:11)
在ChildProcess.spawn(child_process.js:1155:11)
在Object.exports.spawn(child_process.js:988:9)
在Object.exports.spawn(/usr/local/lib/node_modules/cordova/node_modules/cordova lib/src/cordova/superspawn.js:104:31)
在运行ScriptViaChildProcessSpawn时(/usr/local/lib/node_modules/cordova/node_modules/cordova lib/src/hooks/HooksRunner.js:188:23)
运行脚本时(/usr/local/lib/node_modules/cordova/node_modules/cordova lib/src/hooks/HooksRunner.js:131:16)
at/usr/local/lib/node_modules/cordova/node_modules/cordova lib/src/hooks/HooksRunner.js:114:20
完成时(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:787:54)
在self.promiseDispatch.done(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:816:30)
在Promise.Promise.dispatch(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:749:13)
为了排除故障,我将hook脚本的第一行从
#!/usr/local/bin node
到
(因为这在Windows上起作用。节点
在全局范围内)。但是,这导致了一个enoint错误:
pc295786:master Kelster$cordova构建ios运行命令:
/用户/kelster/documents/apps/master/hooks/before\u prepare/001\u c.js
/用户/Kelster/documents/apps/master错误:挂钩失败,出现错误
代码enoint:
/用户/kelster/documents/apps/master/hooks/before\u prepare/001\u c.js
at/usr/local/lib/node_modules/cordova/node_modules/cordova lib/src/hooks/HooksRunner.js:194:23
at_被拒绝(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:797:24)
at/usr/local/lib/node_modules/cordova/node_modules/q/q.js:823:30
at Promise.when(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:1035:31)
在Promise.Promise.dispatch(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:741:41)
at/usr/local/lib/node_modules/cordova/node_modules/q/q.js:557:44
刷新时(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:108:17)
在进程中调用(node.js:355:11)
位于Function.Module.runMain(Module.js:503:11)
启动时(node.js:129:16)
我该如何构建它?如果有任何建议,我将不胜感激
需要注意的一些事项:
(在我绝望中)我尝试运行以下命令,因为“EACCES”类型的错误。但它们似乎都没有对结果产生任何影响。构建仍然失败李>
2) 节点安装在中
/usr/本地/bin
老话说:#/usr/local/bin节点->更好/usr/bin/env节点
更新的答案:不要使用空格引用节点可执行文件,而是使用:
#!/usr/local/bin/node
还可以chmod脚本:例如:
chmod 777 hooks/before_prepare/onde.js
其中onde.js是您的脚本。如果您使用的是Mac(我的案例)或Linux,那么您的.js必须使用chmod 777以避免EACCES错误。sudo cordova构建ios是否有效?这至少会排除访问权限是原因…不@DaveAlden。事实并非如此。也尝试了,谢谢您的回复,但是bin
文件夹中没有env
文件夹。当我运行更改目录命令时,我得到了这个-bash:cd:/usr/bin/env:Not directory
,因为这不是文件夹,只是脚本中的环境引用。无论如何,保持#/usr/local/bin节点和chmod 777脚本应该可以工作。在控制台中尝试env,您应该会看到定义了哪些路径和变量:)我已经用/usr/local/bin/node进行了测试,它正在工作。路径中没有空格。cordova build ios Running命令:/Users/mainframe/Desktop/hello/hooks/before\u prepare/a.js/Users/mainframe/Desktop/hello更改配置谢谢!将第一行从/usr/local/bin node
更改为/usr/local/bin/node
。还运行了chmod
。然后它成功了。请更新这个答案,以便它可以帮助一个可怜的灵魂(如我自己)chmod为我修复它。不过,不需要授予写访问权限<代码>查找钩子-iname“*.js”-execchmoda+x{}\代码>
#!/usr/local/bin/node
chmod 777 hooks/before_prepare/onde.js