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

最有用的评论

在Node环境中,手动清除较少编译的缓存文件:

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对象编译每次更新。
我不是使用无牙胶的工具,而是直接使用了较少的api。
似乎较少缓存结果并且无法正确更新

因此,在您的情况下,一种快速的解决方法(直到解决错误)将存在:

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

是的,问题似乎在于此提交中,其中基于参数https://github.com/less/less.js/commit/a48c24c4dd3c13e00a20ece80323768496a96b36#diff -a6b31db4e862654ae597161e441689bb

似乎问题在于此提交...

嗯,说实话,我看不到任何可能影响进口的东西...

在Node环境中,手动清除较少编译的缓存文件:

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

尝试删除仅对else语句的if / 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提供的解决方法似乎对我不起作用(尝试:[email protected][email protected])。
同样使用@ seven-phases-max提供的require('less').render()解决方法并不能解决问题:(
还有更多建议吗? :)

也受此影响:(

嗨,尽管我不确定我做了什么不同的变通办法, @ tiodot现在为我提供了DOES的功能!
我再次尝试了,我肯定在代码中的某个地方犯了一个错误。
(使用[email protected])。
谢谢@tiodot

谢谢@tiodot

@tiodot @ hawkerboy7 @TigersWay该分支机构可以解决此问题吗? 如果是这样,我会做一个公关-请检查一下-https: //github.com/matthew-dean/less.js/commits/cache-modified

只是检查了2个明显不同的项目,注释了package.json中的@tiodot很棒的补丁,它似乎运行得很好!

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

@ matthew-dean为我工作!

@ matthew-dean是的,它已经解决了这个问题! 公关救援!! :)

@tiodot @ hawkerboy7 @TigersWay不错,很高兴,您的速度应该会稍微快一点。使用热缓存(3.x功能)进行编译要少一些,因此最好将其修复;否则,不建议使用它。 否则,我建议将其取出。 会做一个公关。

此页面是否有帮助?
0 / 5 - 0 等级