2015-11-02 117 views
3

我正在一个IONIC项目,错误:钩子失败,错误代码1:

当我添加android平台,它给了我这样的错误。

Error: Hook failed with error code 1: D:\IONIC Workspace\risecx-app\hooks\before_prepare\01_jshint.js 
    at C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\hooks\HooksRunner.js:195:23 
    at _rejected (C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:797:24) 
    at C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:823:30 
    at Promise.when (C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:1035:31) 
    at Promise.promise.promiseDispatch (C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:741:41) 
    at C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:557:44 
    at flush (C:\Users\HP\AppData\Roaming\npm\node_modules\cordova\node_modules\q\q.js:108:17) 
    at doNTCallback0 (node.js:417:9) 
    at process._tickCallback (node.js:346:13) 

我的钩\ before_prepare \ 01_jshint.js文件是这样......

#!/usr/bin/env node 

var fs = require('fs'); 
var path = require('path'); 
var jshint = require('jshint').JSHINT; 
var async = require('async'); 

var foldersToProcess = [ 'js', 'js/services' ]; 

foldersToProcess.forEach(function(folder) { 
     processFiles("www/" + folder); 
}); 

function processFiles(dir, callback) { 
     var errorCount = 0; 
     fs.readdir(dir, function(err, list) { 
       if (err) { 
         console.log('processFiles err: ' + err); 
         return; 
       } 
       async.eachSeries(list, function(file, innercallback) { 
         file = dir + '/' + file; 
         fs.stat(file, function(err, stat) { 
           if(!stat.isDirectory()) { 
             if(path.extname(file) === ".js") { 
               lintFile(file, function(hasError) { 
                 if(hasError) { 
                   errorCount++; 
                 } 
                 innercallback(); 
               }); 
             } else { 
               innercallback(); 
             } 
           } else { 
             innercallback(); 
           } 
         }); 
       }, function(error) { 
         if(errorCount > 0) { 
           process.exit(1); 
         } 
       }); 
     }); 
} 

function lintFile(file, callback) { 
     console.log("Linting " + file); 
     fs.readFile(file, function(err, data) { 
       if(err) { 
         console.log('Error: ' + err); 
         return; 
       } 
       if(jshint(data.toString())) { 
         console.log('File ' + file + ' has no errors.'); 
         console.log('-----------------------------------------'); 
         callback(false); 
       } else { 
         console.log('Errors in file ' + file); 
         var out = jshint.data(), 
         errors = out.errors; 
         for(var j = 0; j < errors.length; j++) { 
           console.log(errors[j].line + ':' + errors[j].character + ' -> ' + errors[j].reason + ' -> ' + 
errors[j].evidence); 
         } 
         console.log('-----------------------------------------'); 
         callback(true); 
       } 
     }); 
} 

我曾与下面的命令工作....

npm install jshint --save

npm install q --save

npm install async

所以任何想法,其中我犯了一个错误....

+0

你正在使用哪个? – Muhsin

+0

使用命令更新您的jshint npm更新jshint并更新所有内容(Cordova,Ionic CLI,Ionic Lib) – Muhsin

+0

我正在使用Windows 7 @Muhsin – RBK

回答

2

请检查你的hooks directory有执行许可权。获得所有权限的钩子,它的c hild文件夹

+1

Windows的权限??? – Cozzbie

1

如果您的文件中有任何错误,它也会失败,错误代码为1。检查以确保它在这之前没有告诉你有关您文件中的任何错误。

0

我有一个与Moodle Mobile 2构建相似的问题,返回此错误 - 我错过了要完成构建的主目录中的'node_modules'文件夹。
希望这有助于

5

只需删除您的挂钩目录并键入此命令。

ionic hooks add

这将解决您的问题。

+0

没有这样的命令,请更新答案 –

1

在我的情况下,我创建了一个after_prepare钩子来覆盖cordova构建过程,以使用config.xml中指定的实际版本代码。我有同样的错误。 我解决了它,在我的钩子文件(没有引号)在顶部添加“#!/ usr/bin/env节点”。解决了所有问题。希望它可以帮助你。

相关问题