Less.js: Importe werden nicht aktualisiert, wenn sie über dasselbe (?) Weniger Objekt neu kompiliert werden

Erstellt am 7. März 2018  ·  19Kommentare  ·  Quelle: less/less.js

Fehlerbericht
Ich schreibe ein Kompilierungswerkzeug für mein Projekt, es hängt weniger davon ab.

Mein Projektstil Ordner und Dateien gefällt

- styles
   _utils.less
   index.less

und index.less Inhalt ist

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

Ich benutze weniger API, um die weniger Dateien wie zu kompilieren

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

Wenn ich _utils.less Inhalt ändere, wird der obige Code automatisch ausgeführt

Aber seit 3.0.x, wenn ich den Inhalt von _utils.less ändere, ist das result.css das erste Ergebnis, unabhängig davon, wie oft ich es ändere.

aber 2.7.x ist in Ordnung, wenn ich _utils.less Inhalt ändere, hat sich auch der result.css geändert.

bug high priority research needed up-for-grabs

Hilfreichster Kommentar

In der Knotenumgebung wird die zwischengespeicherte Datei manuell gelöscht und weniger kompiliert:

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

Alle 19 Kommentare

Klingt ähnlich wie https://github.com/stevelacy/gulp-less/issues/283.
Ich denke, in diesen "Auto-Watch" -Fällen ist es dasselbe Less-Objekt, das zum Kompilieren jedes Updates verwendet wird, oder? Dann ist es wohl etwas, bei dem einige Import-Caches zwischen verschiedenen render -Aufrufen oder ähnlichem nicht zurückgesetzt werden.

@ Seven-Phases-Max Ja, verwenden Sie dasselbe Less-Objekt, um jedes Update zu kompilieren.
Ich benutze kein schluckloses Tool, ich benutze weniger API direkt.
Es scheint, dass das Ergebnis weniger zwischengespeichert und nicht korrekt aktualisiert wird

Die schnelle Problemumgehung (bis der Fehler behoben ist) in Ihrem Fall lautet also:

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

Ja, es scheint, dass das Problem in diesem Commit liegt, bei dem der Aufrufbaum basierend auf den Argumenten https://github.com/less/less.js/commit/a48c24c4dd3c13e00a20ece80323768496a96b36#diff -a6b31db4e862654ae597161e441689bb manipuliert wird

es scheint, dass das Problem in diesem Commit liegt ...

Hmm, ehrlich gesagt kann ich dort nichts sehen, was die Importe beeinflussen könnte ...

In der Knotenumgebung wird die zwischengespeicherte Datei manuell gelöscht und weniger kompiliert:

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

Danke @tiodot, es scheint soweit zu funktionieren ... Aber ich hoffe, wir werden bald einen "saubereren" Weg finden!

Es könnte etwas mit diesen Zeilen zu tun haben, die für 3.0 hinzugefügt wurden. https://github.com/less/less.js/blob/master/lib/less/tree/mixin-definition.js#L9

Versuchen Sie, das spezifische if / else nur für die else-Anweisung zu entfernen, und prüfen Sie, ob das Problem weiterhin auftritt. Ist dies nicht der Fall, muss diese Optimierung möglicherweise entfernt werden. Idealer wäre es jedoch, den Dateimanager oder einen internen Cache pro neuem Analyse- / Renderaufruf zu löschen.

Überprüfen Sie nur, ob es Updates für dieses Problem gibt?
gulp-less bringt einige Entwickler dazu, dies zu tun.

Ich habe es vor ein paar Stunden noch einmal versucht und es schien gut zu funktionieren (ohne Patch). Irgendjemand anderes?

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

Ich habe das gleiche Problem, das durch ein Upgrade von @xinglie von

Die von @tiodot bereitgestellte
Auch die Verwendung der von @ sieben-Phasen-max bereitgestellten Problemumgehung require('less').render() den Trick nicht ausgeführt :(
Gibt es vielleicht noch mehr Vorschläge? :) :)

Auch davon betroffen :(

Hallo, obwohl ich nicht sicher bin, was ich anders gemacht habe, funktioniert die von @tiodot bereitgestellte Problemumgehung jetzt für mich!
Ich habe es erneut versucht und muss irgendwo im Code einen Fehler gemacht haben.
(mit [email protected]).
Danke @tiodot !

Danke @tiodot

@tiodot @ hawkerboy7 @TigersWay Behebt dieser Zweig das Problem? Wenn ja, mache ich eine PR - bitte überprüfen Sie dies - https://github.com/matthew-dean/less.js/commits/cache-modified

Habe gerade 2 deutlich unterschiedliche Projekte eingecheckt und

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

@ Matthew-Dean arbeitet für mich!

@ Matthew-Dean Ja, es hat das Problem behoben! PR zur Rettung !! :) :)

@tiodot @ hawkerboy7 @TigersWay Cool, das

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen