Less.js: Las importaciones no se actualizan al recompilar a través del mismo (?) Menos objeto

Creado en 7 mar. 2018  ·  19Comentarios  ·  Fuente: less/less.js

informe de error
Escribo una herramienta de compilación para mi proyecto, depende menos.

mi carpeta de estilo de proyecto y archivos me gusta

- styles
   _utils.less
   index.less

y el contenido de index.less es

<strong i="12">@import</strong> "./utils"

Uso menos api para compilar menos archivos como

let less=require('less');
//....
less.render(indexContent,options,(err,result)=>{
       console.log(result.css)
});

cuando cambio el contenido de _utils.less , el código anterior se ejecutará automáticamente

pero desde 3.0.x, cuando cambio el contenido de _utils.less , el result.css es el resultado de la primera vez, sin importar cuántas veces cambie.

pero 2.7.x está bien, cuando cambio el contenido de _utils.less , el result.css también cambió.

bug high priority research needed up-for-grabs

Comentario más útil

En el entorno de nodo, borre manualmente el archivo en caché menos compilado:

const less = require('less');
const fileManagers = less.environment && less.environment.fileManagers || [];
fileManagers.forEach(fileManager => {
     if (fileManager.contents) {
               fileManager.contents = {};
     }
});

Todos 19 comentarios

Suena similar a https://github.com/stevelacy/gulp-less/issues/283.
Supongo que en estos casos de "observación automática" es el mismo objeto Less que se usa para compilar cada actualización, ¿verdad? Entonces supongo que es algo con no resetear algunas importaciones de caché entre diferentes llamadas render o algo así.

@ seven-phase-max sí, use el mismo objeto Less para compilar cada actualización.
No estoy usando la herramienta gulp-less, uso menos api directamente.
parece menos caché el resultado y no se actualiza correctamente

Entonces, la solución rápida (hasta que se solucione el error) en su caso estará en:

require('less').render(indexContent,options,(err,result)=>{
       console.log(result.css)
});

Sí, parece que el problema radica en esta confirmación donde el árbol de llamadas se manipula en función de los argumentos https://github.com/less/less.js/commit/a48c24c4dd3c13e00a20ece80323768496a96b36#diff -a6b31db4e862654ae597161e441689bb

parece que el problema radica en este compromiso ...

Hmmm, honestamente ahí no veo nada que pueda afectar las importaciones ...

En el entorno de nodo, borre manualmente el archivo en caché menos compilado:

const less = require('less');
const fileManagers = less.environment && less.environment.fileManagers || [];
fileManagers.forEach(fileManager => {
     if (fileManager.contents) {
               fileManager.contents = {};
     }
});

Gracias @tiodot , parece estar funcionando hasta ahora ... ¡Pero espero que pronto tengamos una forma "más limpia"!

Podría tener algo que ver con estas líneas agregadas para 3.0. https://github.com/less/less.js/blob/master/lib/less/tree/mixin-definition.js#L9

Intente eliminar el if / else específico solo para la instrucción else y vea si el problema persiste. Si no es así, es posible que deba eliminarse esta optimización. Sin embargo, lo que sería más ideal es borrar el administrador de archivos o cualquier caché interno por cada nueva llamada de análisis / procesamiento.

¿Solo está comprobando si hay actualizaciones para este problema?
Gulp-less está consiguiendo que bastantes desarrolladores lo estén.

Lo intenté de nuevo hace unas horas y parecía estar funcionando bien (sin parche). ¿Alguien mas?

  "dependencies": {
    "browser-sync": "^2.24.4",
    "gulp": "^4.0.0",
    "gulp-autoprefixer": "^5.0.0",
    "gulp-clean-css": "^3.9.4",
    "gulp-hb": "^7.0.1",
    "gulp-less": "^4.0.0",
    "gulp-load-plugins": "^1.5.0",
    "gulp-rename": "^1.2.2"
  },
  "optionalDependencies": {
    "less": "^3.0.4"
  }

Tengo el mismo problema descrito por [email protected].

La solución alternativa proporcionada por @tiodot no pareció funcionar para mí (probado: [email protected] y [email protected]).
Además, el uso de la solución alternativa require('less').render() proporcionada por @ seven-phase-max no funcionó :(
¿Hay quizás más sugerencias? :)

También afectado con esto :(

Hola, aunque no estoy seguro de qué hice de manera diferente, ¡la solución alternativa que @tiodot proporcionó
Lo intenté de nuevo y debo haber cometido un error en algún lugar del código.
(usando [email protected]).
¡Gracias @tiodot !

Gracias @tiodot

@tiodot @ hawkerboy7 @TigersWay ¿Esta rama resuelve el problema? Si es así, haré un PR - por favor revise esto - https://github.com/matthew-dean/less.js/commits/cache-modified

Acabo de verificar 2 proyectos claramente diferentes, comentando el gran parche @tiodot dentro de package.json, ¡y parece estar funcionando perfectamente!

  "optionalDependencies": {
    "less": "github:matthew-dean/less.js#cache-modified"
  },

¡@ matthew-dean funciona para mí!

@ matthew-dean ¡Sí, ha resuelto el problema! PR al rescate !! :)

@tiodot @ hawkerboy7 @TigersWay Genial, lo bueno es que deberías compilar menos rápido con un caché cálido (una característica 3.x), por lo que es preferible que lo arreglen; de lo contrario, habría sugerido sacarlo. Hará un PR.

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