-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Принудительно завершать сборку #420
Comments
\cc @blond |
@teux, а можешь написать пример как вызываешь сборку нескольких нод? |
Через API: var makeApi = require('enb/lib/api/make');
module.exports = co.wrap(function* (config) {
try {
yield makeApi(nodes.build, {
mode: config.mode,
cache: config.cache,
graph: config.graph,
config: function (enbConfig) {
//...
}
});
} catch (e) {
console.log(chalk.red('An error occured:\n%s'), e.toString());
}
}); |
Кейс понял. Да, действительно ENB так всегда и работало (и через API, и через CLI), что собирало все ноды максимально независимо и поэтому при ошибке в одной продолжает собирать остальные. Сейчас никаких способов повлиять на это нету. Можешь подробнее рассказать про свой случай, почему ожидаешь остановки? Я пока не уверен, что такое поведение нужно делать по умолчанию. |
Хочу собрать ошибки со всех нод и вывести их в консоль как общий результат сборки. Видимо, этот vow.all режектится, как только любая нода кидает исключение. После этого взаимодействие внешнего кода с enb заканчивается, но при этом сборка других нод продолжается. Получается, для второй и последующих "плохих" нод внешний код не получает ошибки. И даже ошибка первой ноды, выведенная в консоль, перекроется сообщениями от здоровых нод. |
Хорошее желание :)
Да, именно так работает метод Я бы предложил всегда дожидаться сборки всех таргетов. В случае успеха, как и прежде, отдавать разрезолвленный промис с информацией о собранных таргетах. А вот в случае ошибки возвращать специальный объект ошибки с дополнительными полями/методами с информацией о всех ошибках. Например: var error = new BuildTargetsError();
error.failedTargets // ['desktop.bundles/index']
error.targetErrors // [{ target: 'desktop.bundles/index', error: '[TargetNotFoundError]' }] Это можно сделать не сломав обратную совместимость. Такое решение устроит?
Давай про логгер думать отдельно. |
Не уверен. что мы говорим об одном и том же ) Знать про ошибку в конкретном таргете конкретной ноды - хорошо. Но еще лучше получить ошибки по всем нодам. Вот как мне видится удобный подход. ENB ждет сборку всех нод (allResolved вместо all), анализирует результаты в этом then, и если имеются ошибки, выкидывает BuildNodesError: throw new BuildNodesError({
failedNodes: ['desktop.bundles/index'],
nodeErrors: {
'desktop.bundles/index': BuildTargetsError
}]
})``` |
Я на самом деле это же и предлагал :) Под |
Запускаю сборку нескольких нод через API. Одна нода выбрасывает исключение, и управление приходит сюда. Логично ожидать, что сборка остальных нод прервется, но они продолжают собираться.
Если это особенность архитектуры, можно ли принудительно остановить сборку в таком случае?
The text was updated successfully, but these errors were encountered: