Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function* foo() {}) или копроцедуры (async function foo() {})? Они позволяют описывать конечные автоматы неявно, кратко, и не заботясь о вынесении состояния «за скобки».async function shell(password) {
await write('What is the password?');
while (true) {
const guess = await read();
if (guess === correctPassword) {
await write('Nice guess!');
break;
}
await write('Nope! ;)');
}
while (true) {
await write('Okay, now enter some secret command');
const command = await read();
switch (command) {
case 'secret': {
await write('Purrrfect!');
break;
}
case 'bye': {
await write('Okay, see you later');
return;
}
}
}
}
Стек-трейс показывает невесть кудаТак, первую проблему я вам решил.
ошибки могут быть невразумительныеЭто в случае ошибок в самом транспайлере? Нельзя исключать, конечно. А при использовании транспайленного кода sourcemaps это обрабатывают.
сам процесс занимает времяЧего именно, внедрения транспайлера? Тот же babel подключается, например, следующим образом:
exec node --require "foobar/boot.js" "foobar/main.js";А сам boot.js — это что-то типа такого. Надо будет повыбрасывать оттуда кучу трансформаций, т.к. их уже node давно поддерживает нативно, типа тех же классов. В таком случае, строку запуска можно поменять на что-то типа этого:exec node \
--es_staging \
--expose_debug_as=V8Debug \
--expose_gc_as=V8GC \
--harmony \
--harmony_array_includes \
--harmony_arrow_functions \
--harmony_atomics \
--harmony_concat_spreadable \
--harmony_default_parameters \
--harmony_destructuring \
--harmony_modules \
--harmony_new_target \
--harmony_object \
--harmony_object_observe \
--harmony_proxies \
--harmony_reflect \
--harmony_regexps \
--harmony_rest_parameters \
--harmony_sharedarraybuffer \
--harmony_shipping \
--harmony_simd \
--harmony_sloppy \
--harmony_spread_arrays \
--harmony_spreadcalls \
--harmony_tostring \
--harmony_unicode_regexps \
--strong_mode \
--strong_this \
--throw-deprecation \
--require "foobar/boot.js" \
"foobar/main.js";прикручивать юнит-тестыПризнаться, я пользуюсь Mocha, и с ней никаких проблем не было — запуск тестов ничем не отличается от планового запуска кода, дополнительных телодвижений для этого не нужно. Для karma, как я погуглил, есть варианты:
--require boot.js, как в примере выше, тогда все будет «просто работать»в мире до сих пор полно проектовЕсть уважительная причина — legacy. Для новых проектов нет причин, почему не использовать ES2015/ES2016.
Есть уважительная причина — legacy. Для новых проектов нет причин, почему не использовать ES2015/ES2016.
в клиентской части внедрение сдерживается браузерами
Или нативные есть?
Для новых проектов нет причин, почему не использовать ES2015/ES2016.
Усложнение
только лишь единственный ключ
синхронно у всех разработчиковКакой кошмар, а зачем? Только не говорите, что ваше приложение запускается просто как «node app.js» с командной строки, без npm scripts или какого-нибудь Procfile.
{
"uid": "foobar",
"append": true,
"watch": true,
"script": "foobar.js",
"sourceDir": "/path/to/app",
"command": "node --harmony --require /path/to/app/boot.js"
}Правда, оно не очень красивое, так как sourceDir дублируется в command, потому что авторы forever не предусмотрели экспортировать переменные окружения вида FOREVER_SOURCE_DIR, хотя тут это бы пригодилось.
Пишем код для Node.js в стиле «машина состояний»