2015-10-24 35 views
2

我試圖用一些吞掉插件(jscscsscomb)在開發時的風格我在飛行代碼一飲而盡。無限循環的手錶與自動更新/自動生成的文件

我遇到了與格式化任務運行無限循環的吞噬進程的問題。

什麼,我相信是發生:

  • 開始serve任務某種與所有任務進行
  • 初始運行來準備文件登臺服務器
  • 本地臨時服務器是開始與手錶任務並行
  • myfile.scss由開發人員更新
  • 吞噬觀察員啓動csscomb任務
  • csscomb插件更改文件,並替換它
  • 觀察者看到任務從文件替換&的變化開始的格式任務再次...
  • 的csscomb插件再次運行等等...

這是導致此循環的代碼片段。 (注意:這使用v4吞噬)

'use strict' 

import { task, parallel, series, src, dest, watch, plugins } from './gulp'; 

import { startStagingServer } from './servers'; 

import { solution } from './solution.map'; 

const path = require('path'); 

task('serve', parallel(startStagingServer, watchStyles); 

function watchStyles() { 
    watch([ solution.src.styles ], series(formatStyles, compileStyles)) 
} 

function formatStyles(done) { 
    return src([ solution.src.styles ]) 
    .pipe(plugins.csscomb()) 
    .pipe(dest(solution.src.mount)) // the root of the solution 
} 

function compileStyles() { 
    return src([ solution.src.styles ]) 
    .pipe(plugins.sass().on('error', plug.sass.logError)) 
    .pipe(dest(path.join(solution.dest.stage, 'serve'))); 
} 

有沒有人知道一種方法來避免這種情況?

回答

0

避免這種情況的方法不是將修復程序放入監視器中。使用2個獨立的功能:一個修復,另一個不修復。只看不到那個。例如:

function taskJscsFix() { 
    return gulp.src(path.JS) 
     .pipe(jscs({ 
      configPath: './gulp/.jscsrc', 
      fix: true 
     })) 
     .pipe(gulp.dest(path.SRC.JS)); 
} 

function taskScripts() { 
    return gulp.src(path.JS) 
     .pipe(jscs({ 
      configPath: './gulp/.jscsrc' 
     })) 
     .pipe(jscs.reporter()) 
     .pipe(gulp.dest(path.DEST.JS)); 
} 
+0

嗯不是一個壞主意,但必須有一個方法來修復與手錶運行。 –