수색…


비고

소개

후크는 Cordova CLI가 Cordova / Ionic 응용 프로그램 빌드의 특정 지점에서 실행하는 코드 조각입니다. 후크는 예를 들어 프로젝트에서 파일을 조작하고 응용 프로그램에 플러그인을 자동으로 추가하거나 위 예제에서와 같이 파일의 코드 오류를 검사하는 데 사용할 수 있습니다.

참고 : Node.js를 사용하여 크로스 플랫폼이되도록 후크를 작성하는 것이 좋지만 Javascript 와 같이 작성할 수도 있습니다.

훅 유형

다음 훅 타입이 지원되며, 실행 순서는 이름에 따라 아주 자명하다.

after_build
after_compile
after_docs
after_emulate
after_platform_add
after_platform_rm
after_platform_ls
after_plugin_add
after_plugin_ls
after_plugin_rm
after_plugin_search
after_prepare
after_run
after_serve
before_build
before_compile
before_docs
before_emulate
before_platform_add
before_platform_rm
before_platform_ls
before_plugin_add
before_plugin_ls
before_plugin_rm
before_plugin_search
before_prepare
before_run
before_serve
pre_package/ <-- Applicable to Windows 8 and Windows Phone only. This hook is deprecated.

후크 정의 방법 :

후크는 <hook> 요소를 사용하여 프로젝트의 config.xml 정의 할 수 있습니다 (예 :

<hook type="after_build" src="scripts/appAfterBuild.js" />

플러그인 개발자는 다음과 같이 plugin.xml 에서 <hook> 요소를 사용하여 후크 스크립트를 정의 할 수 있습니다.

<hook type="after_build" src="scripts/afterBuild.js" />

before_plugin_install , after_plugin_install , before_plugin_uninstall 플러그인 설치 / 제거중인 플러그인에 after_plugin_install 플러그인 후크가 실행됩니다.

: root/hooks 디렉토리에 후크를 배치하는 것은 config.xmlplugin.xml 의 후크 요소를 위해 더 이상 사용되지 않습니다. 그러나이 방법을 사용하면 root/hooks 폴더의 파일에 대한 실행 권한을 설정해야합니다.

Cordova 후크에 대한 문서는 여기 에서 찾을 수 있습니다 .

jshint를 사용하여 before_prepare에서 자바 스크립트 파일의 오류를 확인합니다.

#!/usr/bin/env node

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

var foldersToProcess = [
  'js'
];

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 {
          processFiles(file);
        }
      });
    }, 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.error('Errors in file ' + file);
      var out = jshint.data(),
          errors = out.errors;
      for (var j = 0; j < errors.length; j++) {
        console.error(errors[j].line + ':' + errors[j].character + ' -> ' + errors[j].reason + ' -> ' + errors[j].evidence);
      }
      console.error('-----------------------------------------');
      setTimeout(function() {
        callback(true);
      }, 10);
    }
  });
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow