2011-12-27 11 views
8

estoy usando menos en el modo de JS (less.js) de la siguiente manera:LessCSS detiene estilos de procesamiento

<link rel="stylesheet/less" href="assets/styles/less/bootstrap.less" media="all"> 
<script src="assets/scripts/libs/less-1.1.5.min.js"></script> 

Y después de algunas páginas vistas, se detiene el procesamiento de los estilos y da una versión de "caché". Para que vuelva a analizar los estilos, tengo que borrar las cookies del navegador. ¿Alguien sabe por qué es esto? ¿Hay alguna opción para que vuelva a analizar en cada vista de página? ¡Muchas gracias!

ACTUALIZACIÓN: Al revisar parte del código de la biblioteca, parece que utiliza localStorage para almacenar las hojas de estilo como un caché. Se basa en la última hora de modificación del archivo para actualizar ese caché, pero por alguna razón no funciona correctamente porque no está tomando mis cambios ...

Respuesta

17

Acabo de encontrar un issue in GitHub para esto. Citando a mí mismo:

Esto me pasa también en 1.1.5. El script usa localStorage para almacenar las hojas de estilo. Borrar la caché de su navegador no funcionará. Debe borrar sus cookies (cerrar sesión en todas sus cuentas,%! @^#%) O hacer localStorage.clear(). Yo uso esto antes less.js de carga (no usar localStorage yo):

<script> /* Provisory for dev environment: */ localStorage.clear(); </script> 

Cuando va a la producción que acaba de compilar las hojas de estilo css a

+0

No necesita eliminar todos los almacenamientos locales, simplemente puede eliminar las claves relacionadas con LESS.Las claves se ven como 'http {s}: // {host}/path/to/file.less' y una clave relacionada' http {s}: // {host} /path/to/file.less: timestamp' . – Marius

0

La razón es que lo almacena en caché porque lleva tiempo generar los archivos css y ese tiempo puede sumar una mala experiencia de usuario si tiene mucho código para compilar.

se puede poner esto en sus documentos HTML:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 

Pero eso sería deshabilitar el caché de todos los recursos no sólo sus menos archivos.

+0

Esto deshabilitará el almacenamiento en caché de los archivos extraídos del servidor. Aquí el problema es diferente, es decir, less.js agrega otra capa de almacenamiento en memoria caché en el almacenamiento local. – ShitalShah

4

Puede utilizar el siguiente para deshabilitar la caché localStorage:

<script>var less=less||{};less.env='development';</script> 
<script src="path_to_less.js"></script> 
+0

¿En qué lugar lo pongo? –

+0

Esto está mal. 'less.env =" development "' hace que less.js arroje errores de compilación en el documento, 'less.watch()' activa la recarga automática de hojas de estilo. Ninguno de estos deshabilita o borra el caché. –

+0

@Artur 'less.env =" development "' funciona bien (pero no es necesario 'less.watch()'). –

5

agradable encontrar con el almacenamiento local. La solución más rápida y, a continuación, es abrir la consola de su navegador y ejecute el siguiente comando:

localStorage.clear(); 

a continuación, actualiza y ya está.

0

Una forma mejor de hacer esto sería pasar noCache = 1 a la url para borrar el navegador localStorage cuando está desarrollando en menos archivos, luego establece una cookie para recordar borrarla cada vez y luego no puede poner Cache = 0 a desarmar la cookie, de esta manera el usuario final no terminan teniendo su localStorage elimina cuando el uso de su sitio y sólo puede dejarlo en.

$(document).ready(function() {<br> 
    if(window.location.href.indexOf("noCache=1") > -1) {<br> 
     $.cookie('noCache', '1', { expires: 1, path: '/' });<br> 
     localStorage.clear();<br> 
    }<br> 
    if(window.location.href.indexOf("noCache=0") > -1) {<br> 
     $.cookie('noCache', '0', { expires: 1, path: '/' });<br> 
    }<br> 
    if ($.cookie('noCache') == '1'){<br> 
    alert ("disabled Cache");<br> 
    localStorage.clear();<br> 
    }<br> 
});<br> 
<br> 

necesitará jquery cookie plug-in para que esto funcione

+0

Tamaño tan grande ... –

0

también puede agregar un parámetro único para evitar el almacenamiento en caché, como este, por ejemplo, si está utilizando php:

<link rel="stylesheet/less" href="assets/styles/less/bootstrap.less?v=<?= uniqid() ?>" media="all">