Less.js: Roto en el nodo v6.0.0

Creado en 27 abr. 2016  ·  41Comentarios  ·  Fuente: less/less.js

Corriendo

lessc main.less build.css

no generará ningún error ni ningún archivo de compilación.

Ejecutar con nodemon produce más información:

› 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

Comentario más útil

Viendo lo mismo. Ejecutar lessc en cualquier archivo .less trivial no genera ningún archivo de compilación ni errores en Node.js v6, incluso en modo detallado.

Todos 41 comentarios

Less en sí mismo no usa ninguna función ObjectTemplate.Set , por lo que probablemente sea una de sus dependencias. Hay una larga cadena de actualizaciones de dependencia en el maestro actual, por lo que es difícil saber cuán difícil puede ser obtener una versión compatible con v6 . Siéntase libre de investigarlo usted mismo más a fondo y sugerir un parche/PR.

Eso parece un problema con nodemon, no menos

Viendo lo mismo. Ejecutar lessc en cualquier archivo .less trivial no genera ningún archivo de compilación ni errores en Node.js v6, incluso en modo detallado.

He encontrado la causa:

La versión publicada actual de Less llama a path.dirname() con undefined lo que arroja un error con el nodo v6. Esto ya ha sido abordado por ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 pero aún no se ha publicado. El error no se produce porque la implementación actual de lessc se traga todos los errores causados ​​por Less. He creado un PR para arreglar esto.

Entonces, emm, ¿cuál fusionar? #2882 o #2884? :)

Arreglaron dos problemas diferentes en mi opinión

¿Por lo tanto? (Lo pregunto porque se superponen un poco y fusionar ambos necesitaría una edición adicional).

el otro usa process.exit() directamente, lo que debe evitarse para evitar que no se vacíe stdout/stderr

@evanlucas ¿Puede describir cómo se puede reproducir este problema de llamar directamente a process.exit() ? Definitivamente estoy de acuerdo con usted en que process.exit() debe usarse en casos excepcionales porque, por lo general, es mejor terminarlo regularmente o arrojar un error. En este caso, sin embargo, creo que process.exit() con un código de error es más apropiado, porque no queremos mostrar un seguimiento de la pila para los errores esperados. Y también me parece extraño continuar con la ejecución pero evitar un mayor procesamiento con una bandera (como está implementado actualmente).

la configuración de process.exitCode no muestra un seguimiento de la pila. process.exit() en realidad no vacía process.stdout o process.stderr (y ambos no bloquean). Solo debería tener que llamarlo explícitamente en casos excepcionales. De lo contrario, cierre todos sus identificadores y el ciclo de eventos se cerrará por sí solo, lo que hará que el proceso se cierre.

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

Gracias por aclarar esto. No sabía que process.exit() no bloquea. Voy a actualizar mi PR lo antes posible.

Sin embargo, una cosa: si process.exit() no vació process.stdout , ¿por qué hay una salida en mi consola? :sonrisa:

Es posible que ya haya descargado cuando se cierra la corriente. Simplemente no es una garantía. Es por eso que a veces hay una salida (parcial) en la consola.

Confirmado que, al menos para nosotros, ejecutando en la cabeza (que incluye https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932), esto se resuelve.

El uso de "--source-map" aún genera un archivo css vacío para mí ... (de lo contrario, funciona para mí). node.js v6.0.0 en Windows 8 de 64 bits.

@ewebdev sí, puedo confirmar esto. Con #2891, arroja:

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)

Estaría bien abrir un PR que solucione esto, pero no estoy seguro de qué opciones de mapas de origen se admiten en qué situaciones, por ejemplo, cuando la salida es process.stdout . Este código es un poco complicado y probablemente requiera alguna refactorización...

Confirme, esto se rompe con el nodo 6. No se genera ningún error :(

¿Todavía estamos esperando un PR para arreglar esto?

AFAICT, esto está arreglado en la cabeza, así que esperando la publicación de un paquete npm ...

(Otros deberían confirmar.)

@lmeyerov No lo veo en las confirmaciones. Y los PR n.° 2882 o n.° 2884 están vinculados, pero ninguno dice que sea una solución para el Nodo 6. Entonces, que yo sepa, ¿aún no existe un PR a pesar de que @jhnns encontró la causa? O bien, ¿uno de esos PR corrige la compatibilidad con Node 6 pero presenta otros errores (mapa de origen) que aún no se han corregido? ¿Alguien puede aclarar esto?

@matthew-dean Para el problema que encontramos que surgió como lessc sin emitir nada, creo que fue resuelto. https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 . Algo entre la versión publicada actualmente en npm y la línea principal del 22 de abril lo resolvió para nosotros.

@ matthew-dean usando ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193 funciona para mí (lo vi en algún lugar por aquí).

@lmeyerov @matthew-dean _source map_ todavía está jodido para mí, tanto en la cabeza como en https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 =/

Por cierto, incluso sin el error que informa las correcciones de errores, no debería haber nada que hable en contra de lanzar una versión que contenga mi parche ec04a03, de modo que lessc al menos funcione en Node.js v6 como lo hacía antes.

Se lanza @addaleax Less 2.7.0 (justo ahora). ¿Qué errores siguen pendientes? Debería agregar eso como un "error conocido" a esta versión.

Ese es el único que _I_ he encontrado, más el "error" de no tener ninguna salida de error real en caso de falla. Sin embargo, no puedo hablar por los demás.

Por alguna razón, los mapas de origen pasan todas las pruebas de Less, pero después de actualizar, también obtengo el error del mapa de origen, y no en un entorno de Node 6.0. (Ocurriendo en el Nodo 4). Así que hay un cambio que acaba de romper los mapas de origen.

Creo que PR #2834 introdujo el error del mapa fuente. Al revertir la confirmación 470af20 en mi sistema, se solucionó el problema de mi mapa de origen. ¿Puede alguien (@ewebdev) confirmar rápidamente? Si es así, confirmaré la reversión y publicaré una revisión 2.7.1.

//cc @nicks

@matthew-dean Revertir la confirmación https://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fba no resuelve el problema de los mapas de origen en mi entorno.

@ matthew-dean lo siento! es solo una optimización del rendimiento, no dude en revertir si está causando problemas y podemos volver a intentarlo más tarde

Tanta confusión... 😁

Como ya le he dedicado algo de tiempo a investigar, permítanme aclararlo:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 corrige un error en bin/lessc donde se pasaba una ruta indefinida a dirname . Esto ya ha sido publicado, todo está bien 👍
  • Todavía hay un error en bin/lessc , donde se pasa una ruta indefinida a basename . Simplemente ejecute lessc --source-map-map-inline some-file.less y less no emitirá nada a la salida estándar. Todavía no hay relaciones públicas para este error. Traté de arreglar esto, pero como no hay pruebas por lessc y hay tantas opciones diferentes, no tenía la confianza suficiente para no romper nada más... 😞
  • Ambos errores no se informaron al usuario (por ejemplo, como presentar un seguimiento de pila o un código de salida distinto de cero). Esto lo soluciona mi PR que aún está pendiente.

@jhnns Oh, genial, no vi ese mapa fuente uno.

Por lo menos, uno puede _restaurar_ el antiguo comportamiento de Node v5 cambiando path.basename(output) a path.basename(output || 'undefined'); ... Sin embargo, supongo que todo el bloque se puede omitir por output === undefined .

@jhnns ¿Cuál es el efecto del error en bin/lessc ? ¿Es un error crítico? ¿Menos sigue completo? Cual es el resultado? ¿Puede presentar un problema específico para este error con más detalles?

Fusioné su PR para el informe de errores.

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

[editar: no importa, gracias @ matthew-dean]

@ewebdev Si todavía tiene un problema con Less 2.7.1, ¿puede presentar un problema por separado con más detalles?

@claar Ese es un problema aparte (el primero en la lista de @jhnns ), que se ha abordado. El segundo elemento es un error separado, y el de @ewebdev es un error separado. Deben separarse de este problema para mayor claridad.

@nicks Sucede. No serías el primero. Si puede ayudarnos a agregar pruebas para que podamos detectar mapas de origen que no funcionen en el futuro, sería muy apreciado.

Por cierto, como información general, el soporte de desarrollo de Less es un poco escaso en este momento (uno de nuestros principales colaboradores tuvo que dar un paso atrás debido a responsabilidades familiares), por lo que definitivamente agradeceríamos a los desarrolladores de Less que se involucren a nivel organizacional. Puede ponerse en contacto conmigo por separado si tiene preguntas.

He creado un problema aparte. Dado que el problema original se ha resuelto, podemos cerrar este.

@jhnns Suena bien. Gracias por seguir

Todavía se rompió en el nodo v6.9.2 LTS.
No pasa nada cuando se ejecuta lessc

¿Fue útil esta página
0 / 5 - 0 calificaciones