2015-04-08 104 views
3

我想對不在./src/components目錄中的javascript文件運行minifaction。我嘗試這樣做:gulp-if javascript文件但不在特定目錄中gulp-useref

gulp.task('index', function() { 
    var assets = useref.assets(); 

    return gulp.src('src/index.html') 
     .pipe(assets) 
     .pipe(gulpif('!./src/components/** && *.js', uglify())) 
     .pipe(gulpif('*.css', minifyCss())) 
     .pipe(assets.restore()) 
     .pipe(useref()) 
     .pipe(gulp.dest('dist')); 
}); 

但它似乎並沒有工作(即其瓶坯在./src/components js文件縮小反正)。

所有幫助表示讚賞。提前致謝。

回答

5

更新面臨的真正問題

好吧,這是一個點。 gulp-if使用gulp-match來評估條件。在那裏,你可以使用水珠的數組:

.pipe(gulpif(['*.js', '!./src/components/**'], uglify()) 

還有別人:

gulp-if可能是錯誤的做法。我會建議一個流隊列。

var queue = require('streamqueue') 

... 

return queue.queue(
    // all the JS files without components 
    gulp.src(['**/*.js', '!./src/components/**/']) 
     .pipe(uglify()), 
    // all JS files in components 
    gulp.src('./src/components/**/*.js') 
) 
.done() 
.pipe(doSomething()) 

這樣,您可以對所有非組件執行單獨的任務,然後執行常見的過程。

代碼沒有經過測試,但你看到docs的想法。

+0

是的問題是我正在使用gulp-useref。我將用完整的任務 – pQuestions123

+0

來編輯原文。更新了答案 – ddprrt

+0

我正在考慮使用球體,但如果它們中的任何一個都是真的,球體條件不會導致真實性?如果是這樣,那麼無論路徑如何,它都會導致所有JavaScript文件都成立。 – pQuestions123

1

我認爲真正的問題在於var assets = useref.assets();將連接文件存儲在assets中。因此,單個文件的路徑會丟失,任何使用路徑的gulp-if語句都是無用的。

有一個useref.assets(noconcat: true)的選項。我想我可以然後使用:

var assets = useref.assets(noconcat: true); 

return gulp.src('src/index.html') 
.pipe(assets) 
.pipe(gulpif(['*.js', '!./src/components/**'], uglify()) 
.pipe... 

但這也沒有工作。我不知道爲什麼(也許文件的完整路徑不存儲?)。

無論我最終選擇的解決方案是使用gulp-usemin。吞掉-usemin可以做eveything我想在我原來的職位來完成,像這樣:

gulp.task('usemin', function() { 
    return gulp.src(paths.index) 
     .pipe(usemin({ 
      js1: [uglify(), 'concat'], 
      js2: ['concat'], 
      css: [minifyCss(), 'concat'] 
     })) 
     .pipe(gulp.dest('dist/')); 
}); 

其中JS1和JS2是管道IDS(HTML中的規定)。

0

useref.assets()將連接的文件存儲在資產中是正確的。但是,現在有一個選項可以將非連接文件傳遞到流中。不知道這是否會解決問題,但在之前發佈的其他示例中,選項未正確傳遞。選項應傳遞作爲對象,所以它應該是這樣的:

var assets = useref.assets({ noconcat: true }); 

return gulp.src('src/index.html') 
    .pipe(assets) 
    .pipe(gulpif(['*.js', '!./src/components/**'], uglify()) 
    .pipe... 

我會更新的文檔,因爲我只注意到有一個在它的選項沒有例子。

相關問題