Less.js: Cassé sur le nœud v6.0.0

Créé le 27 avr. 2016  ·  41Commentaires  ·  Source: less/less.js

Fonctionnement

lessc main.less build.css

ne produira aucune erreur et aucun fichier de construction.

Exécuter avec nodemon donne plus d'informations :

› 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

Commentaire le plus utile

Voir la même chose. L'exécution de lessc sur n'importe quel fichier trivial .less ne produit aucun fichier de construction et aucune erreur sous Node.js v6, même en mode verbeux.

Tous les 41 commentaires

Less lui-même n'utilise aucune fonction ObjectTemplate.Set , c'est donc probablement l'une de ses dépendances. Il y a une longue chaîne de mises à jour de dépendances dans le maître actuel, il est donc difficile de dire à quel point il peut être difficile d'obtenir une version compatible v6 . N'hésitez pas à l'étudier vous-même plus en profondeur et à suggérer un patch/PR.

Cela ressemble à un problème avec nodemon, pas moins

Voir la même chose. L'exécution de lessc sur n'importe quel fichier trivial .less ne produit aucun fichier de construction et aucune erreur sous Node.js v6, même en mode verbeux.

J'ai trouvé la cause :

La version publiée actuelle de Less appelle path.dirname() avec undefined qui génère une erreur avec le nœud v6. Ceci a déjà été traité par ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 mais pas encore publié. L'erreur n'est pas générée car l'implémentation actuelle de lessc avale toutes les erreurs causées par Less lui-même. J'ai créé un PR pour résoudre ce problème.

Alors, euh, lequel fusionner ? #2882 ou #2884 ? :)

Ils résolvent deux problèmes différents IMO

Alors les deux ? (Je demande parce qu'ils se chevauchent quelque peu et que la fusion des deux nécessiterait des modifications supplémentaires).

l'autre utilise process.exit() directement, ce qui doit être évité pour éviter de vider stdout/stderr

@evanlucas Pouvez-vous décrire comment ce problème d'appel direct process.exit() peut être reproduit ? Je suis tout à fait d'accord avec vous que process.exit() doit être utilisé dans de rares cas car il est généralement préférable de le terminer régulièrement ou en lançant une erreur. Dans ce cas, cependant, je pense que process.exit() avec un code d'erreur est plus approprié, car nous ne voulons pas afficher une trace de pile pour les erreurs attendues. Et il me semble aussi bizarre de continuer l'exécution mais d'empêcher la poursuite du traitement avec un indicateur (comme c'est actuellement le cas).

le paramètre process.exitCode n'affiche pas de trace de pile. process.exit() ne vide pas réellement process.stdout ou process.stderr (et ils sont tous les deux non bloquants). Vous ne devriez avoir à l'appeler explicitement que dans de rares cas. Sinon, fermez toutes vos poignées et la boucle d'événements se fermera d'elle-même, ce qui entraînera la fermeture du processus.

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

Merci d'avoir clarifié cela. Je ne savais pas que process.exit() n'était pas bloquant. Je vais mettre à jour mon PR dès que possible.

Une chose cependant : si process.exit() n'a pas vidé process.stdout - pourquoi y a-t-il une sortie dans ma console ? :sourire:

Il est possible d'avoir déjà vidé au moment où le flux est fermé. Ce n'est tout simplement pas une garantie. C'est pourquoi il y a parfois une sortie (partielle) dans la console.

Confirmé que, au moins pour nous, en cours d'exécution (qui inclut https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 ), cela est résolu.

L'utilisation de "--source-map" génère toujours un fichier css vide pour moi .. (sinon cela fonctionne pour moi). node.js v6.0.0 sur Windows 8 64 bits.

@ewebdev oui , je peux le confirmer. Avec #2891, ça lance :

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)

Je serais d'accord pour ouvrir un PR qui résout ce problème, mais je ne sais pas quelles options de carte source sont prises en charge dans quelles situations, par exemple lorsque la sortie est process.stdout . Ce code est un peu compliqué et nécessite probablement une refactorisation...

Confirmez, cela rompt avec le nœud 6. Aucune erreur n'est générée :(

Attendons-nous toujours un PR pour résoudre ce problème?

AFAICT, ceci est corrigé sur la tête, donc en attente d'une publication de paquet npm ..

(D'autres devraient confirmer.)

@lmeyerov Je ne le vois pas dans les commits. Et les PR #2882 ou #2884 sont liés, mais aucun ne dit qu'il s'agit d'un correctif pour le nœud 6. Donc, à ma connaissance, un PR n'existe pas encore même si @jhnns a trouvé la cause ? Ou bien, l'un de ces PR corrige-t-il la compatibilité de Node 6 mais introduit-il d'autres bogues (carte source) qui n'ont pas encore été corrigés ? Quelqu'un peut-il clarifier cela?

@matthew-dean Pour le problème que nous avons rencontré qui a fait surface comme lessc n'émettant rien, je _pense_ qu'il a été résolu par. https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 . Quelque chose entre la version actuellement publiée sur npm et la ligne principale du 22 avril l'a résolu pour nous.

@matthew-dean utilisant ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193 fonctionne pour moi (je l'ai vu quelque part ici).

@lmeyerov @matthew-dean _source map_ est toujours boken pour moi, à la fois sur la tête et sur https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 =/

Btw, même sans les corrections de bogues de rapport d'erreur, rien ne devrait s'opposer à la publication d'une version contenant mon correctif ec04a03, de sorte que lessc fonctionne au moins sur Node.js v6 comme il le faisait auparavant.

@addaleax Less 2.7.0 est sorti (juste maintenant). Quels bugs sont encore en suspens ? Je devrais ajouter cela comme un "bogue connu" à cette version.

C'est le seul que _I_ ait rencontré, plus le "bug" de ne pas avoir de sortie d'erreur réelle en cas d'échec. Je ne peux pas parler pour les autres, cependant.

Pour une raison quelconque, les cartes source réussissent tous les tests Less, mais après la mise à niveau, j'obtiens également l'erreur de carte source, et pas dans un environnement Node 6.0. (Ce qui se passe dans le nœud 4.) Il y a donc un changement qui vient de casser les cartes sources.

Je crois que PR # 2834 a introduit le bogue de la carte source. Rétablir le commit 470af20 sur mon système a résolu mon problème de carte source. Quelqu'un (@ewebdev) peut-il rapidement confirmer ? Si tel est le cas, je validerai la réversion et publierai un correctif 2.7.1.

//cc @nicks

@matthew-dean Reverting commit https://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fba ne résout pas le problème des cartes source sur mon env.

@matthew-dean désolé! c'est juste une optimisation des performances, n'hésitez pas à revenir en arrière si cela pose problème et nous pourrons réessayer plus tard

Tant de confusion... 😁

Puisque j'ai déjà mis du temps à enquêter, permettez-moi de le clarifier:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 corrige un bogue dans bin/lessc où un chemin non défini était passé à dirname . C'est maintenant publié, tout va bien 👍
  • Il y a toujours un bogue dans bin/lessc , où un chemin indéfini est passé à basename . Exécutez simplement lessc --source-map-map-inline some-file.less et moins n'émettra rien sur stdout. Il n'y a pas encore de PR pour ce bogue. J'ai essayé de résoudre ce problème, mais comme il n'y a pas de tests pour lessc et qu'il y a tellement d'options différentes, je n'étais pas assez confiant pour ne rien casser d'autre... 😞
  • Les deux bogues n'ont pas été signalés à l'utilisateur (par exemple, comme présenter une trace de pile ou un code de sortie non nul). Ceci est fixé par mon PR qui est toujours en attente.

@jhnns Oh, cool, je n'ai pas vu cette carte source.

Si rien d'autre, on peut _restaurer_ l'ancien comportement de Node v5 en changeant path.basename(output) en path.basename(output || 'undefined'); … Je suppose que tout le bloc peut être ignoré pour output === undefined , cependant.

@jhnns Quel est l'effet du bogue dans bin/lessc . Est-ce un bug critique ? Est-ce que Less est toujours complet ? Quel est le résultat? Pouvez-vous signaler un problème spécifique pour ce bogue avec plus de détails ?

J'ai fusionné votre PR pour le rapport d'erreur.

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

[edit : tant pis, merci @matthew-dean]

@ewebdev Si vous rencontrez toujours un problème avec Less 2.7.1, pouvez-vous déposer un problème séparé avec plus de détails ?

@claar C'est un problème distinct (le premier sur la liste de @jhnns ), qui a été résolu. Le deuxième élément est un bogue distinct, et celui de @ewebdev est un bogue distinct. Ils doivent être séparés de cette question pour plus de clarté.

@nicks Ça arrive. Vous ne seriez pas le premier. Si vous pouvez nous aider à ajouter des tests afin que nous puissions détecter que les cartes sources ne fonctionnent pas à l'avenir, ce serait très apprécié.

Au fait, en tant que FYI général, le support de développement de Less est un peu mince en ce moment (l'un de nos principaux contributeurs a dû prendre du recul en raison de responsabilités familiales), nous serions donc ravis que les développeurs de Less s'impliquent au niveau organisationnel. Vous pouvez me contacter séparément si vous avez des questions.

J'ai créé un problème séparé. Puisque le problème initial a été résolu, nous pouvons fermer celui-ci.

@jhnns Ça sonne bien. Merci pour le suivi.

Toujours en panne sur le nœud v6.9.2 LTS.
Rien ne se passe lors de l'exécution de lessc

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

vecerek picture vecerek  ·  5Commentaires

xblakestone picture xblakestone  ·  3Commentaires

renoth picture renoth  ·  6Commentaires

bassjobsen picture bassjobsen  ·  6Commentaires

rejas picture rejas  ·  6Commentaires