3

我正在使用以下文件夹结构:

css
|_ main.css
|
|_ less
   |_ main.less
   |_ sub.less
   |
   |_ shared
      |_ variables.less
      |_ header.less
      |_ footer.less

我在我的gulpfile.js中使用以下内容

gulp.task('less', function() {
    gulp.src(paths.less + 'main.less', {read: true})
        .pipe(plugins.plumber({errorHandler: onError}))
        .pipe(plugins.less({
            paths: [paths.less + 'shared', paths.less]
        }))
        .pipe(plugins.plumber.stop())
        .pipe(gulp.dest(paths.css));
});

...

gulp.task('less:watch', function(){
    gulp.watch([paths.less + '**/*.less'], ['less']);
});

gulp.task('default', ['less', 'less:watch']);

我的main.less包括所有其他 LESS 文件的 @imports。

@import "sub.less";
@import "./shared/variables.less";
@import "./shared/header.less";
@import "./shared/footer.less";
  • 如果更新了 LESS 文件(除了main.less),则文件main.css不会更改。

  • 如果main.less更新(在任何其他 LESS 文件更改后需要),则main.css然后更新。

无论哪个 LESS 文件被更改,我如何修改我的 gulpfile.js 以更新“main.css”文件?

谢谢你。

4

2 回答 2

0

我无法直接重现您的问题,但我预计这可能是由于从文件系统文件缓存中读取了修改后的文件。

Less 使用fs.readFile调用来读取导入的文件。默认情况下,此调用使用该r选项打开文件。文档没有明确说明该r选项使用文件系统文件缓存,但文档确实告诉您该rs选项绕过文件系统文件缓存:

'rs' - 打开文件以同步模式读取。指示操作系统绕过本地文件系统缓存。

这主要用于在 NFS 挂载上打开文件,因为它允许您跳过可能过时的本地缓存。它对 I/O 性能有非常实际的影响,因此除非您需要,否则不要使用此标志。

请注意,这不会将 fs.open() 变成同步阻塞调用。如果这就是你想要的,那么你应该使用 fs.openSync()

可能的解决方案:

rs让 Less 使用该选项打开文件。找到该node_modules/gulp-less/node_modules/less/lib/less-node/file-manager.js文件并将第 56 行替换为以下代码:

fs.readFile(fullFilename, {encoding: 'utf-8', flag: 'rs'}, function(e, data) {

否则您可能想知道为什么您修改的文件仍在文件缓存中并尝试 rsync 文件缓存:https ://superuser.com/questions/319286/how-to-totally-clear-the-filesytems-cache-on- linux

于 2015-02-07T15:33:14.210 回答
0

有一个针对您的工作流程的gulp-progeny插件。

于 2015-07-19T09:46:52.097 回答