我最近开始使用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)
如何构建这个?我很感激我可以尝试的任何建议。
需要注意的一些事项:
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中
答案 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错误。