Less.js: ノードv6.0.0で壊れています

作成日 2016年04月27日  ·  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

最も参考になるコメント

同じを見て。 些細な.lessファイルでlesscを実行すると、冗長モードであっても、Node.jsv6ではビルドファイルやエラーは発生しません。

全てのコメント41件

Less自体はObjectTemplate.Set関数を使用しないため、おそらくその依存関係の1つです。 現在のマスターには依存関係の更新の長いチェーンがあるため、 v6互換のリリースを取得することがどれほど難しいかをまだ判断するのは困難です。 自分で深く調べて、パッチ/PRを提案してください。

それはnodemonの問題のように見えますが、それ以下ではありません

同じを見て。 些細な.lessファイルでlesscを実行すると、冗長モードであっても、Node.jsv6ではビルドファイルやエラーは発生しません。

私は原因を見つけました:

現在公開されているバージョンのLessは、 path.dirname()undefinedで呼び出し、ノードv6でエラーをスローします。 これはすでにec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932によって対処されていますが、まだ公開されていません。 lesscの現在の実装は、Less自体によって引き起こされたすべてのエラーを飲み込むため、エラーはスローされません。 これを修正するためのPRを作成しました。

それで、えーと、どちらをマージしますか? #2882または#2884? :)

彼らはIMOの2つの異なる問題を修正します

だから両方? (それらがいくらか重複していて、両方をマージするには追加の編集が必要になるため、私は尋ねています)。

もう1つは、 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

これを明確にするためのThx。 process.exit()がノンブロッキングであることを知りませんでした。 PRをできるだけ早く更新します。

ただし、 process.exit()process.stdoutをフラッシュしなかった場合、コンソールに出力があるのはなぜですか? :ニヤリ:

ストリームが閉じられるまでに、すでにフラッシュされている可能性があります。 保証ではありません。 そのため、コンソールに(部分的な)出力が表示されることがあります。

少なくとも私たちにとっては、頭の中で実行していること(https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932を含む)でこれが解決されることを確認しました。

「--source-map」を使用しても、空のcssファイルが生成されます(それ以外の場合は機能します)。 Windows864ビット上のnode.jsv6.0.0。

@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パッケージの公開を待っています。

(他の人は確認する必要があります。)

@lmeyerovコミットには表示されません。 そして、PR#2882または#2884はリンクされていますが、どちらもノード6の修正であるとは言いません。したがって、私の知る限り、 @ jhnnsが原因を見つけたとしても、PRはまだ存在しません。 または、それらのPRの1つはノード6の互換性を修正しますが、まだ修正されていない他のバグ(ソースマップ)を導入しますか? 誰かがこれを明確にすることができますか?

@ matthew-dean lesscが何も放出しないとして表面化した問題については、私はそれが解決されたと_思います_。 https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 。 npmで現在公開されているバージョンと4月22日のメインラインの間の何かが私たちのためにそれを解決しました。

@ matthew-ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193を使用するディーンは私のために働きます(私はそれをこのあたりのどこかで見ました)。

@lmeyerov @ matthew-dean _source map_は、頭とhttps://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932の両方でまだ私のために壊れています= /

ところで、エラー報告のバグ修正がなくても、ec04a03パッチを含むバージョンをリリースすることに反対するものは何もないはずです。そのため、lesscは少なくとも以前と同じようにNode.jsv6で動作します。

@addaleax Less 2.7.0がリリースされました(ちょうど今)。 どのバグがまだ未解決ですか? これを「既知のバグ」としてこのリリースに追加する必要があります。

_I_が遭遇したのはこれだけであり、失敗した場合に実際のエラーが出力されないという「バグ」もあります。 しかし、他の人のために話すことはできません。

何らかの理由で、ソースマップはすべてのLessテストに合格しますが、アップグレード後、ノード6.0環境ではなく、ソースマップエラーも発生します。 (ノード4で発生します。)したがって、ソースマップが壊れたばかりの変更がいくつかあります。

PR#2834でソースマップのバグが発生したと思います。 システムでコミット470af20を元に戻すと、ソースマップの問題が修正されました。 誰か(@ewebdev)はすぐに確認できますか? もしそうなら、私は復帰をコミットし、2.7.1ホットフィックスを出します。

// cc @nicks

@matthew-deanコミットを元に戻すhttps://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fbaは私の環境のソースマップの問題を解決しません

@ matthew-ディーンごめんなさい! これは単なるパフォーマンスの最適化です。問題が発生している場合は、元に戻してください。後でもう一度試すことができます。

とても混乱しています...😁

私はすでに調査するためにそれに時間をかけているので、それを明確にしましょう:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932は、未定義のパスがdirnameに渡されたbin/lesscのバグを修正します。 これは現在公開されています、すべてが順調です👍
  • bin/lesscにはまだバグがあり、未定義のパスがbasenameに渡されます。 lessc --source-map-map-inline some-file.lessを実行するだけで、stdoutに何も出力されません。 このバグのPRはまだありません。 私はこれを修正しようとしましたが、 lesscのテストがなく、さまざまなオプションがあるため、他に何も壊さないほど自信がありませんでした...😞
  • 両方のバグはユーザーに報告されませんでした(たとえば、スタックトレースやゼロ以外の終了コードの提示など)。 これは、まだ保留中の私のPRによって修正されています。

@jhnnsああ、かっこいい、私はそのソースマップを見ませんでした。

他に何もない場合は、 path.basename(output)path.basename(output || 'undefined');に変更することで、古いNode v5の動作を_復元_できます…ただし、ブロック全体をoutput === undefinedでスキップできると思います。

@jhnns bin/lesscのバグの影響は何ですか。 重大なバグですか? レスはまだ完了していますか? 結果はどうなりますか? このバグの特定の問題を詳細に報告できますか?

エラー報告のためにPRをマージしました。

@matthew- deanhttps://github.com/less/less.js/issues/2896を参照してください

[編集:気にしないで、@matthew-deanに感謝]

@ewebdevそれでもLess2.7.1で問題が発生する場合は、詳細を記載した別の問題を提出できますか?

@claarこれは別の問題( @jhnnsのリストの最初の問題)であり、対処されています。 2番目の項目は別のバグであり、 @ewebdevは別のバグです。 明確にするために、これらはこの問題から分離する必要があります。

@nicksそれは起こります。 あなたは最初ではないでしょう。 将来機能しないソースマップを検出できるようにテストを追加するのを手伝っていただければ幸いです。

ところで、一般的な参考までに、Lessの開発サポートは現在少しスリムです(私たちの主要な貢献者の1人は家族の責任のために辞任しなければなりませんでした)ので、Less開発者が組織レベルで関与することを間違いなく歓迎します。 ご不明な点がございましたら、別途ご連絡ください。

別の問題を作成しました。 元の問題が解決されたので、これを閉じることができます。

@jhnnsいいですね。 フォローアップしていただきありがとうございます。

ノードv6.9.2LTSでまだ壊れています。
lesscを実行しても何も起こりません

このページは役に立ちましたか?
0 / 5 - 0 評価