ionic-framework
Ионные крючки CLI
Поиск…
замечания
Вступление
Крючки - это фрагменты кода, которые CLI Cordova выполняет в определенных точках вашей сборки кордовой / ионной приложений. Крючки можно использовать, например, для манипулирования файлами в нашем проекте, автоматически добавлять плагины в ваше приложение или как в приведенном выше примере проверить ошибки кода в ваших файлах.
Примечание . Настоятельно рекомендуется писать ваши крючки с помощью 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.
Способы определения крючков:
Крюки могут быть определены в config.xml
проекта с помощью элементов <hook>
, например:
<hook type="after_build" src="scripts/appAfterBuild.js" />
В качестве разработчика плагина вы можете определить скрипты hook с помощью элементов <hook>
в plugin.xml
следующим образом:
<hook type="after_build" src="scripts/afterBuild.js" />
before_plugin_install
, after_plugin_install
, before_plugin_uninstall
плагины будут запущены исключительно для установки / удаления плагина.
Примечание . Размещение крючков в каталоге root/hooks
считается устаревшим в пользу элементов hook в plugin.xml
config.xml
и plugin.xml
. Если вы, однако, используете этот подход, не забудьте установить права выполнения на файлы в папке root/hooks
.
Документацию для крючков Кордовы можно найти здесь .
Проверка ошибок в файлах Javascript в before_prepare с помощью jshint
#!/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);
}
});
}