Less.js: 同じ(?)少ないオブジェクトを介して再コンパイルする場合、インポートは更新されません

作成日 2018年03月07日  ·  19コメント  ·  ソース: less/less.js

バグレポート
私は自分のプロジェクト用のコンパイルツールを書いていますが、依存度は低くなっています。

私のプロジェクトスタイルのフォルダとファイルが好き

- styles
   _utils.less
   index.less

index.lessコンテンツは

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

私はより少ないAPIを使用してより少ないファイルをコンパイルします

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

_utils.lessコンテンツを変更すると、上記のコードが自動的に実行されます

しかし、3.0.x以降、 _utils.lessコンテンツを変更すると、何回変更しても、 result.cssが初めての結果になります。

しかし、2.7.xは問題ありません。 _utils.lessコンテンツを変更すると、 result.cssも変更されます。

bug high priority research needed up-for-grabs

最も参考になるコメント

ノード環境では、コンパイルされていないキャッシュファイルを手動でクリアします。

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

全てのコメント19件

https://github.com/stevelacy/gulp-less/issues/283に似ているように
これらの「自動監視」の場合、各更新のコンパイルに使用されるのと同じLessオブジェクトだと思いますよね? それなら、異なるrender呼び出しの間でいくつかのインポートキャッシュをリセットしない、またはそのようなものだと思います。

@ Seven-phases-maxはい、同じLessオブジェクトを使用し
私はgulp-lessツールを使用していません。直接使用するAPIは少なくなっています。
結果のキャッシュが少なく、正しく更新されていないようです

したがって、(バグが解決されるまでの)迅速な回避策は次のようになります。

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

はい、問題はこのコミットにあるようです。ここでは、引数に基づいてコールツリーが操作されますhttps://github.com/less/less.js/commit/a48c24c4dd3c13e00a20ece80323768496a96b36#diff -a6b31db4e862654ae597161e441689bb

問題はこのコミットにあるようです...

うーん、正直なところ、輸入に影響を与える可能性のあるものは何も見当たりません...

ノード環境では、コンパイルされていないキャッシュファイルを手動でクリアします。

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

@tiodotに感謝します。これまでのところ機能しているようです...しかし、すぐに「よりクリーンな」方法が得られることを願っています。

3.0で追加されたこれらの行と関係がある可能性があります。 https://github.com/less/less.js/blob/master/lib/less/tree/mixin-definition.js#L9

特定のif / elseをelseステートメントだけに削除して、問題が引き続き発生するかどうかを確認してください。 そうでない場合は、この最適化を削除する必要があります。 ただし、より理想的なのは、新しい解析/レンダリング呼び出しごとにファイルマネージャーまたは内部キャッシュをクリアすることです。

この問題の更新があるかどうかを確認するだけですか?
gulp-lessは、かなりの数の開発者がこれにぶつかっています。

数時間前にもう一度試してみたところ、(パッチなしで)正常に動作しているようでした。 他の誰か?

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

@xinglieが[email protected]からアップグレードすることで説明されているのと同じ問題があり

@tiodotによって提供された回避策は、
また、@ seven-phases-maxによって提供されるrequire('less').render()回避策を使用しても、トリックは実行されませんでした:(
おそらくもっと提案がありますか? :)

これにも影響されます:(

こんにちは、私が何を変えたかはわかりませんが、
もう一度試してみましたが、コードのどこかで間違いを犯したに違いありません。
[email protected]を使用)。
ありがとう@tiodot

ありがとう@tiodot

@tiodot @ hawkerboy7 @TigersWayこのブランチは問題を解決しますか? もしそうなら、私はPRをします-これをチェックしてください-https://github.com/matthew-dean/less.js/commits/cache-modified

package.json内の@tiodotのすばらしいパッチをコメントアウトして、2つの明らかに異なるプロジェクトをチェックインした

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

@ matthew-ディーンは私のために働きます!

@ matthew-deanはい、問題は解決しました。 救助へのPR !! :)

@tiodot @ hawkerboy7 @TigersWayかっこいい、いいことは、少し速くなるはずです。ウォームキャッシュ(3.x機能)でのコンパイルが少ないので、修正することをお勧めします。 そうでなければ私はそれを取り出すことを提案したでしょう。 PRを行います。

このページは役に立ちましたか?
0 / 5 - 0 評価