Hooks Przewodnik

Cordova haki stanowią specjalne skrypty, które może być dodany przez aplikację i programistów wtyczki lub nawet przez swój własny zbudować system do Dostosuj polecenia cordova. Hak skryptów może definiowane przez dodanie ich do specjalnego folderu wstępnie zdefiniowane ( /hooks ) lub poprzez pliki konfiguracyjne ( config.xml i plugin.xml ) i uruchomić pojedynczo w następującej kolejności:

  • Stosowania haczyków z /hooks ;
  • Stosowania haczyków z config.xml ;
  • Haki plugin zplugins/.../plugin.xml.

Uwaga: katalog /hooks jest uważana za zastąpiona hak elementy w pliku config.xml i plugin.xml.

Typy obsługiwanych hak

Obsługiwane są następujące typy haka:

after_build
after_compile
after_clean
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_plugin_install // Plugin hooks in plugin.xml are executed for a plugin being installed only
after_prepare
after_run
after_serve
before_build
before_clean
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_plugin_install // Plugin hooks in plugin.xml are executed for a plugin being installed only
before_plugin_uninstall // Plugin hooks in plugin.xml are executed for a plugin being uninstalled only
before_prepare
before_run
before_serve
pre_package // Windows and Windows Phone only

Sposoby definiowania haki

Via /hooks katalogu

Uwaga: Ta metoda jest uważana za zastąpiona hak elementy w pliku config.xml i plugin.xml.

Aby wykonać akcję niestandardową podczas odpowiedniego typu hak jest zwolniony, użyj haka typu jako nazwę podfolderu wewnątrz katalogu "haki" i miejsce skrypt pliku tutaj, na przykład:

# script file will be automatically executed after each build
hooks/after_build/after_build_custom_action.js

Podczas korzystania z tych haczyków, zawsze działały jako pliki wykonywalne, nie jako ładowalne moduły JavaScript. Pamiętaj: zrobić skryptów wykonywalnych w tym przypadku.

Plik config.XML

Haki mogą być definiowane w projektu config.xml za pomocą < hak > elementy, na przykład:

<hook type="before_build" src="scripts/appBeforeBuild.bat" />
<hook type="before_build" src="scripts/appBeforeBuild.js" />
<hook type="before_plugin_install" src="scripts/appBeforePluginInstall.js" />

<platform name="wp8">
    <hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.bat" />
    <hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.js" />
    <hook type="before_plugin_install" src="scripts/wp8/appWP8BeforePluginInstall.js" />
    ...
</platform>

<platform name="windows8">
    <hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.bat" />
    <hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.js" />
    <hook type="before_plugin_install" src="scripts/windows8/appWin8BeforePluginInstall.js" />
    ...
</platform>

Haki plugin (plugin.xml)

Jako autora wtyczki, które można zdefiniować hak skrypty za pomocą < hak > elementy w plugin.xml tak:

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

<platform name="wp8">
    <hook type="before_plugin_install" src="scripts/wp8BeforeInstall.js" />
    <hook type="before_build" src="scripts/wp8BeforeBuild.js" />
    ...
</platform>

before_plugin_install, after_plugin_install, before_plugin_uninstall plugin, haki będzie zwolniony wyłącznie dla wtyczki zainstalowane/odinstalowany.

Skrypt interfejs

Javascript

Jeśli piszesz haków przy użyciu Node.js należy używać następującej definicji modułu:

module.exports = function(context) {
    ...
}

Możesz zrobić twój scipts asynchroniczny przy użyciu Q:

module.exports = function(context) {
    var Q = context.requireCordovaModule('q');
    var deferral = new Q.defer();

    setTimeout(function(){
      console.log('hook.js>> end');
    deferral.resolve();
    }, 1000);

    return deferral.promise;
}

Context obiekt zawiera typ chwytacza, wykonywany skrypt pełną ścieżkę, hak opcje, argumenty przekazywane do Cordova i najwyższego poziomu "cordova" obiektu:

{
  "hook": "before_plugin_install",
  "scriptLocation": "c:\\script\\full\\path\\appBeforePluginInstall.js",
  "cmdLine": "The\\exact\\command\\cordova\\run\\with arguments",
  "opts": {
    "projectRoot":"C:\\path\\to\\the\\project",
    "cordova": {
      "platforms": ["wp8"],
      "plugins": ["com.plugin.withhooks"],
      "version": "0.21.7-dev"
    },
    "plugin": {
      "id": "com.plugin.withhooks",
      "pluginInfo": {
        ...
      },
      "platform": "wp8",
      "dir": "C:\\path\\to\\the\\project\\plugins\\com.plugin.withhooks"
    }
  },
  "cordova": {...}
}

skrypty haki plugin tylko przekazywany obiekt Context.opts.plugin .

Może również wymagać dodatkowych modułów Cordova w skrypcie przy użyciu context.requireCordovaModule w następujący sposób:

var Q = context.requireCordovaModule('q');

Uwaga: nowy moduł ładowarka skrypt interfejs jest używany do plików .js zdefiniowane przez plik config.xml lub plugin.xml tylko. Ze względu na kompatybilność hak pliki określone przez /hooks foldery są uruchamiane za pośrednictwem węzła child_process tarło, zobacz "Non-javascript" sekcji poniżej.

Non-javascript

Uwaga: zalecamy pisania haków przy użyciu Node.js, tak, że są one cross-platform, zobacz sekcja "Javascript" powyżej.

Skrypty w języku javascript nie są uruchamiane za pośrednictwem węzła child_process tarło z katalogu projektu i przechodzi katalogu głównego jako pierwszy argument. Wszystkie inne opcje są przekazywane do skryptu za pomocą zmiennych środowiskowych:

  • CORDOVA_VERSION - wersja Cordova-CLI.
  • CORDOVA_PLATFORMS - przecinkami lista platform, które dotyczy polecenia (np.: android, ios).
  • CORDOVA_PLUGINS - przecinkami lista pluginów identyfikatorów, które dotyczy polecenia (np.: org.apache.cordova.file, org.apache.cordova.file przelew)
  • CORDOVA_HOOK - ścieżka do hak, który jest aktualnie wykonywany.
  • CORDOVA_CMDLINE - dokładnie argumenty przekazywane do cordova (np.: cordova uruchamiać ios--naśladować)

Jeśli skrypt zwraca kod zakończenia, a następnie polecenie cordova nadrzędnego zostanie przerwane.

Należy również zauważyć, że nawet jeśli pracujesz na Windows, a w przypadku skryptów hak nie są pliki bat, (które jest zalecane, jeśli chcesz, aby Twoje skrypty do pracy w systemach operacyjnych innych niż Windows) Cordova CLI będzie oczekiwać linię szulernia jako pierwszy wiersz to wiedzieć Tłumacz musi użyć do uruchomienia skryptu. Linii szulernia powinna odpowiadać następującym przykładzie:

#!/usr/bin/env [name_of_interpreter_executable]

Przykładowe użycie

W tym przykładzie Zademonstrowano sposób użycia haki Cordova do śledzenia wyjścia konsoli rozmiar pliku apk wygenerowany dla platformy Android.

Utwórz puste Cordova app i dodać następującą definicję do pliku config.xml powiedzieć Cordova do uruchomienia skryptu afterBuild.js po każdej budowy platformy.

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

Utwórz plik scripts/afterBuild.js i dodać następujące wykonania. Używamy asynchronicznej wersji metody fs.stat do wykazania, jak asynchroniczne funkcjonalności może odbywać się za pomocą haków.

module.exports = function(ctx) {
    // make sure android platform is part of build 
    if (ctx.opts.platforms.indexOf('android') < 0) {
        return;
    }
    var fs = ctx.requireCordovaModule('fs'),
        path = ctx.requireCordovaModule('path'),
        deferral = ctx.requireCordovaModule('q').defer();

    var platformRoot = path.join(ctx.opts.projectRoot, 'platforms/android');
    var apkFileLocation = path.join(platformRoot, 'build/outputs/apk/android-debug.apk');

    fs.stat(apkFileLocation, function(err,stats) {
        if (err) {
             deferral.reject('Operation failed');
        } else {
            console.log('Size of ' + apkFileLocation + ' is ' + stats.size +' bytes');
            deferral.resolve();
        }
    });

    return deferral.promise;
};

Parametr ctx w powyższym przykładzie jest przekazywana przez Cordova i reprezentuje kontekst wykonywania skryptu pełną ścieżkę, platformą docelową, argumentów wiersza polecenia, itp i udostępnia również funkcje dodatkowe pomocnicze. Zobacz Interfejs skrypt sekcji powyżej dla więcej szczegółów.

Teraz można dodać platformy android i wykonać budować.

cordova platform add android
..
cordova build
..
Size of path\to\app\platforms\android\build\outputs\apk\android-debug.apk is 1821193 bytes

Tutaj można znaleźć więcej przykładów dobry zwyczaj:

http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/