Less.js: Defekt auf Knoten v6.0.0

Erstellt am 27. Apr. 2016  ·  41Kommentare  ·  Quelle: less/less.js

Laufen

lessc main.less build.css

gibt keinen Fehler und keine Build-Datei aus.

Wenn Sie mit nodemon laufen, erhalten Sie weitere Informationen:

› 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

Hilfreichster Kommentar

Gleiches sehen. Das Ausführen von lessc auf einer trivialen .less-Datei gibt keine Build-Datei und keine Fehler unter Node.js v6 aus, selbst im ausführlichen Modus.

Alle 41 Kommentare

Less selbst verwendet keine ObjectTemplate.Set -Funktion, also ist es wahrscheinlich eine seiner Abhängigkeiten. Es gibt eine lange Kette von Abhängigkeitsaktualisierungen im aktuellen Master, daher ist es schwer zu sagen, wie schwierig es sein könnte, eine mit v6 kompatible Version zu erhalten. Fühlen Sie sich frei, es selbst genauer zu untersuchen und einen Patch/PR vorzuschlagen.

Das sieht nach einem Problem mit nodemon aus, nicht weniger

Gleiches sehen. Das Ausführen von lessc auf einer trivialen .less-Datei gibt keine Build-Datei und keine Fehler unter Node.js v6 aus, selbst im ausführlichen Modus.

Ich habe die Ursache gefunden:

Die aktuell veröffentlichte Version von Less ruft path.dirname() mit undefined , was einen Fehler mit Knoten v6 auslöst. Dies wurde bereits von ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 angesprochen, aber noch nicht veröffentlicht. Der Fehler wird nicht ausgegeben, da die aktuelle Implementierung von lessc alle von Less selbst verursachten Fehler verschluckt . Ich habe eine PR erstellt, um dies zu beheben.

Also, emm, welches soll zusammengeführt werden? #2882 oder #2884? :)

Sie beheben zwei verschiedene Probleme IMO

Also beides? (Ich frage, weil sie sich etwas überschneiden und das Zusammenführen beider eine zusätzliche Bearbeitung erfordern würde).

der andere verwendet direkt process.exit() , was vermieden werden sollte, um zu verhindern, dass stdout/stderr nicht geleert wird

@evanlucas Kannst du beschreiben, wie dieses Problem beim direkten Aufruf process.exit() reproduziert werden kann? Ich stimme Ihnen definitiv zu, dass process.exit() in seltenen Fällen verwendet werden sollte, da es normalerweise besser ist, es regelmäßig zu beenden oder einen Fehler zu werfen. In diesem Fall halte ich jedoch process.exit() mit einem Fehlercode für angemessener, da wir keinen Stack-Trace für erwartete Fehler anzeigen möchten. Und es erscheint mir auch seltsam, die Ausführung fortzusetzen, aber die weitere Verarbeitung mit einem Flag zu verhindern (wie es derzeit implementiert ist).

Das Setzen von process.exitCode zeigt keinen Stack-Trace. process.exit() löscht nicht wirklich process.stdout oder process.stderr (und sie sind beide nicht blockierend). Sie sollten es nur in seltenen Fällen explizit aufrufen müssen. Andernfalls schließen Sie alle Ihre Handles und die Ereignisschleife wird von selbst geschlossen, wodurch der Prozess beendet wird.

Verwandte: https://github.com/nodejs/node/issues/6409

Thx für die Klarstellung. Ich wusste nicht, dass process.exit() nicht blockiert. Ich werde meine PR so schnell wie möglich aktualisieren.

Eines jedoch: Wenn process.exit() process.stdout nicht geleert hat – warum gibt es dann eine Ausgabe in meiner Konsole? :Grinsen:

Es ist möglich, dass bei Schließung des Baches bereits gespült wurde. Es ist nur keine Garantie. Deshalb gibt es manchmal (teilweise) Ausgaben in der Konsole.

Bestätigt, dass dies, zumindest für uns, durch Ausführen von Head (einschließlich https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 ) behoben wird.

Die Verwendung von "--source-map" generiert immer noch eine leere CSS-Datei für mich ... (ansonsten funktioniert es für mich). node.js v6.0.0 unter Windows 8 64-Bit.

@ewebdev ja, das kann ich bestätigen. Mit #2891 wirft es:

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)

Ich wäre in Ordnung, einen PR zu öffnen, der dies behebt, aber ich bin mir nicht sicher, welche Source-Map-Optionen in welchen Situationen unterstützt werden, z. B. wenn die Ausgabe process.stdout ist. Dieser Code ist etwas kompliziert und erfordert wahrscheinlich einige Umgestaltungen ...

Bestätigen, das bricht mit Knoten 6 ab. Es wird kein Fehler ausgegeben :(

Warten wir immer noch auf eine PR, um das zu beheben?

AFAICT, das ist auf dem Kopf behoben, also warte auf die Veröffentlichung eines npm-Pakets.

(Andere sollten es bestätigen.)

@lmeyerov Ich sehe es nicht in den Commits. Und PRs Nr. 2882 oder Nr. 2884 sind verlinkt, aber keiner sagt, dass es ein Fix für Node 6 ist. Also existiert meines Wissens noch kein PR, obwohl @jhnns die Ursache gefunden hat? Oder behebt einer dieser PRs die Kompatibilität von Node 6, führt aber andere Fehler (Quellzuordnung) ein, die noch nicht behoben wurden? Kann das jemand klären?

@matthew-dean Für das Problem, auf das wir gestoßen sind und das auftauchte, als lessc nichts aussendete, _denke_ ich, dass es gelöst wurde. https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 . Irgendetwas zwischen der aktuell veröffentlichten Version auf npm und der Mainline vom 22. April hat es für uns gelöst.

@matthew-dean mit ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193 funktioniert für mich (ich habe es hier irgendwo gesehen).

@lmeyerov @matthew-dean _source map_ ist immer noch für mich boken, sowohl auf dem Kopf als auch auf https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 =/

Übrigens, auch ohne die Error Reporting Bugfixes sollte nichts dagegen sprechen, eine Version mit meinem ec04a03-Patch zu veröffentlichen, damit lessc zumindest auf Node.js v6 wie bisher funktioniert.

@addaleax Less 2.7.0 wird veröffentlicht (gerade jetzt). Welche Bugs sind noch offen? Ich sollte das als "bekannten Fehler" zu dieser Version hinzufügen.

Das ist der einzige, auf den _I_ gestoßen ist, plus den „Bug“, im Falle eines Fehlers keine echte Fehlerausgabe zu haben. Kann aber nicht für andere sprechen.

Aus irgendeinem Grund bestehen Source Maps alle Less-Tests, aber nach dem Upgrade erhalte ich auch den Source Map-Fehler und nicht in einer Node 6.0-Umgebung. (Passiert in Knoten 4.) Es gibt also eine Änderung, die nur Quellkarten beschädigt hat.

Ich glaube, PR #2834 hat den Quellkartenfehler eingeführt. Das Zurücksetzen von Commit 470af20 auf meinem System hat mein Quellkartenproblem behoben. Kann jemand (@ewebdev) schnell bestätigen? Wenn dies der Fall ist, werde ich die Umkehrung festschreiben und einen 2.7.1-Hotfix veröffentlichen.

//cc @nicks

@matthew-dean Reverting commit https://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fba löst das Quellkartenproblem auf meiner Umgebung nicht .

@matthew-dean Entschuldigung! Es ist nur eine Leistungsoptimierung, Sie können jederzeit zurückkehren, wenn es Probleme verursacht, und wir können es später erneut versuchen

So viel Verwirrung... 😁

Da ich bereits einige Zeit in die Untersuchung investiert habe, lassen Sie es mich klarstellen:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 behebt einen Fehler in bin/lessc , bei dem ein undefinierter Pfad an dirname übergeben wurde. Das wurde jetzt veröffentlicht, alles bestens 👍
  • Es gibt noch einen Fehler in bin/lessc , wo ein undefinierter Pfad an basename übergeben wird . Führen Sie einfach lessc --source-map-map-inline some-file.less aus, und weniger gibt nichts an stdout aus. Es gibt noch keine PR für diesen Fehler. Ich habe versucht, dies zu beheben, aber da es keine Tests für lessc gibt und es so viele verschiedene Optionen gibt, war ich nicht zuversichtlich genug, nichts anderes zu beschädigen ... 😞
  • Beide Fehler wurden dem Benutzer nicht gemeldet (z. B. das Anzeigen eines Stack-Trace oder eines Nicht-Null-Exit-Codes). Dies wird durch meine PR behoben, die noch aussteht.

@jhnns Oh, cool, ich habe diese Quellkarte nicht gesehen.

Wenn nichts anderes, kann man das alte Verhalten von Node v5 _wiederherstellen_, indem man path.basename(output) in path.basename(output || 'undefined'); ändert … Ich denke, der ganze Block dort kann für output === undefined übersprungen werden.

@jhnns Was ist die Auswirkung des Fehlers in bin/lessc . Ist es ein kritischer Fehler? Ist Less noch vollständig? Was ist das Ergebnis? Können Sie ein spezifisches Problem für diesen Fehler mit weiteren Details einreichen?

Ich habe Ihre PR für die Fehlerberichterstattung zusammengeführt.

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

[Bearbeiten: Macht nichts, danke @matthew-dean]

@ewebdev Wenn Sie immer noch ein Problem mit Less 2.7.1 haben, können Sie ein separates Problem mit weiteren Details einreichen?

@claar Das ist ein separates Problem (das erste auf der Liste von @jhnns ), das angesprochen wurde. Das zweite Element ist ein separater Fehler, und der von @ewebdev ist ein separater Fehler. Sie müssen aus Gründen der Klarheit von diesem Problem getrennt werden.

@nicks Es passiert. Du wärst nicht der Erste. Wenn Sie uns helfen können, Tests hinzuzufügen, damit wir in Zukunft nicht funktionierende Source Maps erkennen können, würden wir uns sehr freuen.

Übrigens, allgemein zu Ihrer Information, Less' Entwicklerunterstützung ist im Moment etwas dürftig (einer unserer wichtigsten Mitwirkenden musste wegen familiärer Verpflichtungen zurücktreten), daher würden wir es definitiv begrüßen, wenn Less-Entwickler sich auf organisatorischer Ebene engagieren würden. Bei Fragen können Sie sich gerne separat an mich wenden.

Ich habe ein separates Thema erstellt. Da das ursprüngliche Problem gelöst wurde, können wir dieses hier schließen.

@jhnns Klingt gut. Vielen Dank für das Nachfassen.

Auf Knoten v6.9.2 LTS immer noch kaputt.
Beim Ausführen von lessc passiert nichts

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen