Cordova Build在OS X上失败了EACCES& ENOENT

时间:2015-02-11 06:11:19

标签: ios node.js macos cordova

我最近开始使用Cordova构建iOS应用程序,但我遇到了障碍。在安装了nodeJS,git和cordova(使用sudo)之后,我在我的用户帐户的Documents文件夹中创建了我的第一个应用程序。

第一轮比赛完美无缺。一切正常,将我的开发帐户添加到Xcode帮助我的应用程序在设备上运行。我决定通过在001_c.js中添加名为<appName>/hooks/before_prepare folder的“before_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 kellster $ cordova build ios运行命令:   /Users/kellster/documents/apps/master/hooks/before_prepare/001_c.js   / Users / kellster / documents / apps / master错误:产生 EACCES       at exports._errnoException(util.js:746:11)       在ChildProcess.spawn(child_process.js:1155:11)       at Object.exports.spawn(child_process.js:988:9)       at Object.exports.spawn(/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:104:31)       at runScriptViaChildProcessSpawn(/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:188:23)       at runScript(/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       在_fulfilled(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:787:54)       at self.promiseDispatch.done(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:816:30)       在Promise.promise.promiseDispatch(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:749:13)

要进行故障排除,我从

更改了钩子脚本的第一行
#!/usr/local/bin node

#! node

(因为这适用于Windows。node在全球范围内)。但是,这导致ENOENT错误:

  

pc295786:master kellster $ cordova build ios运行命令:   /Users/kellster/documents/apps/master/hooks/before_prepare/001_c.js   / Users / kellster / documents / apps / master错误:Hook失败并显示错误   代码 ENOENT :   /Users/kellster/documents/apps/master/hooks/before_prepare/001_c.js       at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:194:23       在_rejected(/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       在Promise.when(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:1035:31)       在Promise.promise.promiseDispatch(/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       在flush(/usr/local/lib/node_modules/cordova/node_modules/q/q.js:108:17)       at process._tickCallback(node.js:355:11)       在Function.Module.runMain(module.js:503:11)       在启动时(node.js:129:16)

如何构建这个?我很感激我可以尝试的任何建议。


需要注意的一些事项:

  1. (在我的绝望中)我尝试运行以下命令,因为&#34; EACCES&#34;错误类型。但是他们似乎都没有对结果产生任何影响。构建仍然失败。
  2. sudo chmod 777 “/Users/kellster/documents/apps/master"
    sudo chmod 777 “/usr/local/lib”
    sudo chmod 777 "/usr/local/bin/"
    chmod 777 "/Users/kellster/documents/apps/master/platforms/"
    sudo chmod a+rwx "/Users/kellster/Documents/apps/Master/hooks/before_prepare/001_c.js"
    sudo chmod a+rwx "/Users/kellster/Documents/apps/Master/"
    sudo chown -R kellster /usr/local/lib/node_modules/cordova
    

    2)节点安装在

      

    的/ usr / local / bin中

1 个答案:

答案 0 :(得分:11)

旧答案:#!/ usr / local / bin node - &gt;更好的#!/ usr / bin / env node

更新的答案:不要使用空格来引用节点可执行文件而是使用:

     #!/usr/local/bin/node 

同样chmod你的脚本:例如:

      chmod 777 hooks/before_prepare/onde.js 

其中onde.js是你的脚本。如果您使用的是Mac(我的情况)或Linux,那么您的.js必须在chmod 777上以避免EACCES错误。