Less.js: Сломан на узле v6.0.0

Созданный на 27 апр. 2016  ·  41Комментарии  ·  Источник: less/less.js

Бег

lessc main.less build.css

не выводит никакой ошибки и файла сборки.

Выполнение с nodemon дает дополнительную информацию:

› nodemon -e less --exec 'lessc src/main.less build.css'
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x36610d2c9fa9 <JS Object>#0#
    1: .node [module.js:568] [pc=0x1aa0081d0f64] (this=0x225da61d89b9 <an Object with map 0x7af7e117be1>#1#,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    2: load [module.js:456] [pc=0x1aa008138e72] (this=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0x1aa00813899d] (this=0x36610d204189 <undefined>,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_mo 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x1aa00800961b
 8: 0x1aa0081d0f64
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x36610d2c9fa9 <JS Object>#0#
    1: .node [module.js:568] [pc=0x1aa0081d0f64] (this=0x225da61d89b9 <an Object with map 0x7af7e117be1>#1#,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    2: load [module.js:456] [pc=0x1aa008138e72] (this=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0x1aa00813899d] (this=0x36610d204189 <undefined>,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_mo 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x1aa00800961b
 8: 0x1aa0081d0f64
needs decision needs info

Самый полезный комментарий

Видеть то же самое. Запуск lessc для любого тривиального файла .less не выводит ни файла сборки, ни ошибок в Node.js v6, даже в подробном режиме.

Все 41 Комментарий

Сам по себе Less не использует никаких функций ObjectTemplate.Set , поэтому, вероятно, это одна из его зависимостей. В текущем мастере есть длинная цепочка обновлений зависимостей, поэтому пока сложно сказать, насколько сложно получить версию, совместимую с v6 . Не стесняйтесь исследовать это самостоятельно и предложить патч / PR.

Это похоже на проблему с nodemon, не меньше

Видеть то же самое. Запуск lessc для любого тривиального файла .less не выводит ни файла сборки, ни ошибок в Node.js v6, даже в подробном режиме.

Я нашел причину:

Текущая опубликованная версия Less вызывает path.dirname() с undefined , что выдает ошибку с узлом v6. Это уже было рассмотрено ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932, но еще не опубликовано. Ошибка не возникает, потому что текущая реализация lessc проглатывает все ошибки , вызванные самим Less. Я создал PR, чтобы исправить это.

Итак, эмм, какой из них слить? #2882 или #2884? :)

Они решают две разные проблемы IMO

Так оба? (Я спрашиваю, потому что они несколько перекрываются, и для их объединения потребуется дополнительное редактирование).

другой использует process.exit() напрямую, чего следует избегать, чтобы предотвратить сброс stdout/stderr

@evanlucas Можете ли вы описать, как можно воспроизвести эту проблему с прямым вызовом process.exit() ? Я определенно согласен с вами, что process.exit() следует использовать в редких случаях, потому что обычно лучше завершать его регулярно или выдавая ошибку. Однако в этом случае я думаю, что process.exit() с кодом ошибки более уместно, потому что мы не хотим показывать трассировку стека для ожидаемых ошибок. И мне также кажется странным продолжать выполнение, но предотвращать дальнейшую обработку с помощью флага (как это реализовано в настоящее время).

установка process.exitCode не показывает трассировку стека. process.exit() на самом деле не сбрасывает process.stdout или process.stderr (и оба они неблокирующие). Вы должны явно вызывать его только в редких случаях. В противном случае закройте все свои дескрипторы, и цикл событий закроется сам по себе, что приведет к завершению процесса.

Связано: https://github.com/nodejs/node/issues/6409

Спасибо за разъяснение этого. Я не знал, что process.exit() неблокирует. Я собираюсь обновить свой PR как можно скорее.

Но одно но: если process.exit() не сбросил process.stdout — почему в моей консоли есть вывод? :ухмылка:

Возможно, к моменту закрытия потока уже сброшено. Это просто не гарантия. Вот почему иногда (частичный) вывод в консоль.

Подтверждено, что, по крайней мере, для нас, бегущих в голове (включая https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932), это решается.

Использование «--source-map» по-прежнему создает для меня пустой файл css .. (в противном случае у меня работает). node.js v6.0.0 в 64-разрядной версии Windows 8.

@ewebdev да, я могу это подтвердить. С # 2891 выдает:

lessc --source-map-map-inline styles/main.less
path.js:7
    throw new TypeError('Path must be a string. Received ' + inspect(path));
    ^

TypeError: Path must be a string. Received undefined
    at assertPath (path.js:7:11)
    at Object.basename (path.js:1355:5)
    at /Users/jhnns/dev/jhnns/less.js/bin/lessc:292:61
    at Object.<anonymous> (/Users/jhnns/dev/jhnns/less.js/bin/lessc:486:3)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)

Я был бы в порядке, чтобы открыть PR, который исправляет это, но я не уверен, какие параметры исходной карты поддерживаются в каких ситуациях, например, когда вывод process.stdout . Этот код немного сложен и, вероятно, требует некоторого рефакторинга...

Подтвердите, это разрывается с узлом 6. Ошибка не выводится :(

Мы все еще ждем PR, чтобы исправить это?

AFAICT, это исправлено в голове, поэтому ждите публикации пакета npm.

(Другие должны подтвердить.)

@lmeyarov Я не вижу этого в коммитах. И PR # 2882 или # 2884 связаны, но ни один из них не говорит, что это исправление для Node 6. Итак, насколько мне известно, PR еще не существует, хотя @jhnns нашел причину? Или один из этих PR исправляет совместимость с Node 6, но вносит другие ошибки (исходная карта), которые еще не исправлены? Может ли кто-нибудь прояснить это?

@matthew-dean Что касается проблемы, с которой мы столкнулись, которая обнаружилась, что lessc ничего не излучает, я _думаю_ решил ее. https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 . Что-то между текущей опубликованной версией на npm и основной веткой от 22 апреля решило это для нас.

@matthew-dean, использующий ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193, у меня работает (я видел это где-то здесь).

@lmeyrov @matthew-dean _source map_ для меня все еще бокен, как на голове, так и на https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 =/

Между прочим, даже без исправлений ошибок, сообщающих об ошибках, не должно быть ничего, что говорило бы против выпуска версии, содержащей мой патч ec04a03, так что lessc, по крайней мере, работает на Node.js v6, как это было раньше.

@addaleax Less 2.7.0 выпущен (только сейчас). Какие ошибки все еще нерешены? Я должен добавить это как «известную ошибку» в этом выпуске.

Это единственное, с чем _I_ столкнулся, плюс «ошибка», заключающаяся в отсутствии реального вывода ошибок в случае сбоя. Однако не могу говорить за других.

По какой-то причине исходные карты проходят все тесты Less, но после обновления я также получаю ошибку исходной карты, а не в среде Node 6.0. (Происходит в узле 4.) Итак, есть некоторые изменения, которые только что сломали исходные карты.

Я считаю, что PR # 2834 представил ошибку исходной карты. Возврат фиксации 470af20 в моей системе устранил мою проблему с исходной картой. Может ли кто-нибудь (@ewebdev) быстро подтвердить? Если это так, я сделаю реверсию и выпущу исправление 2.7.1.

//cc @ники

@matthew-dean Возврат фиксации https://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fba не решает проблему исходных карт в моей среде.

@мэттью-дин извините! это просто оптимизация производительности, не стесняйтесь вернуться, если это вызывает проблемы, и мы можем повторить попытку позже

Столько путаницы... 😁

Поскольку я уже потратил некоторое время на расследование, позвольте мне уточнить:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 исправляет ошибку в bin/lessc , из-за которой в dirname передавался неопределенный путь. Это уже опубликовано, все в порядке 👍
  • В bin/lessc все еще есть ошибка, когда неопределенный путь передается в basename . Просто запустите lessc --source-map-map-inline some-file.less , и less ничего не выведет на стандартный вывод. PR для этого бага пока нет. Я пытался это исправить, но поскольку тестов на lessc нет, а вариантов очень много, я не был достаточно уверен, чтобы ничего не сломать... 😞
  • Об обеих ошибках пользователю не сообщалось (например, о представлении трассировки стека или ненулевого кода выхода). Это исправлено моим PR , который все еще находится на рассмотрении.

@jhnns О, круто, я не видел эту исходную карту.

По крайней мере, можно _восстановить_ старое поведение Node v5, изменив path.basename(output) на path.basename(output || 'undefined'); … Я думаю, что весь блок можно пропустить за output === undefined .

@jhnns Каков эффект ошибки в bin/lessc . Это критическая ошибка? Меньше все еще завершено? Что в итоге? Можете ли вы указать конкретную проблему для этой ошибки с более подробной информацией?

Я слил ваш PR для сообщения об ошибках.

@matthew-dean См. https://github.com/less/less.js/issues/2896

[править: Неважно, спасибо @matthew-dean]

@ewebdev Если у вас все еще есть проблема с Less 2.7.1, можете ли вы создать отдельную проблему с более подробной информацией?

@claar Это отдельная проблема (первая в списке @jhnns ), которая была решена. Второй элемент — это отдельная ошибка, а @ewebdev — отдельная ошибка. Их нужно отделить от этого вопроса для ясности.

@nicks Бывает. Ты бы не был первым. Если вы можете помочь нам добавить тесты, чтобы мы могли обнаружить, что исходные карты не работают в будущем, мы будем очень признательны.

Кстати, в общем, к сведению, поддержка разработчиков Less сейчас немного слаба (один из наших основных участников был вынужден отступить из-за семейных обязанностей), поэтому мы определенно приветствовали бы участие разработчиков Less на организационном уровне. Вы можете связаться со мной отдельно, если у вас есть вопросы.

Я создал отдельную тему. Поскольку первоначальная проблема была решена, мы можем закрыть эту.

@jhnns Звучит хорошо. Спасибо за внимание.

Все еще сломался на узле v6.9.2 LTS.
Ничего не происходит при запуске lessc

Была ли эта страница полезной?
0 / 5 - 0 рейтинги