Less.js: As importações não são atualizadas ao recompilar por meio do mesmo (?) Menos objeto

Criado em 7 mar. 2018  ·  19Comentários  ·  Fonte: less/less.js

relatório de erro
Eu escrevo uma ferramenta de compilação para o meu projeto, depende menos.

minha pasta de estilo de projeto e arquivos como

- styles
   _utils.less
   index.less

e o conteúdo de index.less é

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

Eu uso menos api para compilar menos arquivos como

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

quando eu mudar o conteúdo de _utils.less , o código acima será executado automaticamente

mas desde 3.0.x, quando eu mudo _utils.less conteúdo, o result.css é o resultado da primeira vez, independentemente da mudança quantas vezes.

mas 2.7.x está ok, quando eu mudo o conteúdo de _utils.less , o result.css também mudou.

bug high priority research needed up-for-grabs

Comentários muito úteis

No ambiente Node, limpe manualmente o arquivo em cache menos compilado:

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

Todos 19 comentários

Parece semelhante a https://github.com/stevelacy/gulp-less/issues/283.
Acho que nesses casos de "observação automática" é o mesmo objeto Less usado para compilar cada atualização, certo? Então eu acho que é algo com não redefinir algum cache de importação entre diferentes render chamadas ou algo parecido.

@ seven-phase-max yes, use o mesmo objeto Less para compilar cada atualização.
Eu não uso a ferramenta gulp-less, eu uso menos api diretamente.
parece menos armazenar em cache o resultado e não atualizar corretamente

Portanto, a solução rápida (até que o bug seja resolvido) no seu caso será:

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

Sim, parece que o problema está neste commit em que a árvore de chamada é manipulada com base nos argumentos https://github.com/less/less.js/commit/a48c24c4dd3c13e00a20ece80323768496a96b36#diff -a6b31db4e862654ae597161e441689bb

parece que o problema está neste commit ...

Hmm, honestamente não consigo ver nada que possa afetar as importações ...

No ambiente Node, limpe manualmente o arquivo em cache menos compilado:

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

Obrigado @tiodot parece estar funcionando até agora ... Mas espero que possamos obter uma maneira "mais limpa" logo!

Pode ter algo a ver com essas linhas adicionadas para 3.0. https://github.com/less/less.js/blob/master/lib/less/tree/mixin-definition.js#L9

Tente remover o if / else específico apenas para a instrução else e veja se o problema ainda ocorre. Caso contrário, essa otimização pode precisar ser removida. No entanto, o que seria mais ideal é limpar o gerenciador de arquivos ou qualquer cache interno por nova chamada de análise / renderização.

Apenas verificando se há alguma atualização para este problema?
gulp-less está fazendo com que alguns desenvolvedores acertem isso.

Apenas tentei novamente algumas horas atrás e parecia estar funcionando bem (sem patch). Alguém mais?

  "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"
  }

Eu tenho o mesmo problema descrito por [email protected].

A solução alternativa fornecida por @tiodot não pareceu funcionar para mim (tentei: [email protected] e [email protected]).
Além disso, usar a solução alternativa require('less').render() fornecida por @ seven-phase-max não funcionou :(
Existem talvez mais sugestões? :)

Também afetado por :(

Olá, embora eu não tenha certeza do que fiz de maneira diferente, a solução alternativa fornecida pelo @tiodot funciona para mim agora!
Tentei novamente e devo ter cometido um erro em algum lugar do código.
(usando [email protected]).
Obrigado @tiodot !

Obrigado @tiodot

@tiodot @ hawkerboy7 @TigersWay Este branch resolve o problema? Em caso afirmativo, farei um PR - verifique isto - https://github.com/matthew-dean/less.js/commits/cache-modified

Acabei de fazer verificações em 2 projetos claramente diferentes, comentando @tiodot ótimo patch dentro do package.json, e parece estar funcionando perfeitamente !!

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

@matthew-dean trabalha para mim!

@ matthew-dean Sim, resolveu o problema! PR para o resgate !! :)

@tiodot @ hawkerboy7 @TigersWay Legal, o legal é que você deve ficar um pouco mais rápido Compilando menos com um cache quente (um recurso 3.x), então é preferível consertá-lo; caso contrário, eu teria sugerido retirá-lo. Fará um PR.

Esta página foi útil?
0 / 5 - 0 avaliações