2016-04-27 42 views
1

我現在有這樣的從子目錄運行吞噬?

SASS 
    gulpfile.js 
    node_modules 
    sites 
     example-site 
      scss 
      css 
     example-site-two 
      scss 
      css 
     example-site-three 
      scss 
      css 

我已經吞掉安裝在具有任務「青菜,所有」,可以去通過每一個網站SCSS文件夾,並把它編譯成CSS主父SASS文件夾中的文件結構。

我正在嘗試編寫一個名爲'sass-single'的新任務,該任務可以從任何示例站點文件夾運行。假設我在文件夾「example-site-two」中,我希望能夠cmd並執行「gulp sass-single」,並且只需要在此網站上編譯SASS。同樣的事情我想設置一個手錶任務。

問題是每當我從站點文件夾運行此任務時,它將我的工作目錄更改爲父SASS文件夾。我不希望爲每個不同的站點執行100個不同的任務,我寧願只做一個'sass-single'任務,這足夠聰明,僅在我運行腳本時從文件夾中編譯文件。

當前咕嘟咕嘟任務嘗試

gulp.task('sass-single', function() { 
     process.chdir('./'); 

     // Where are the SCSS files? 
     var input = './scss/*.scss'; 

     // Where do you want to save the compiles CSS file? 
     var output = './css'; 

     return gulp 
     .src(input) 
     .pipe(sourcemaps.init()) 
     .pipe(sass(sassOptions).on('error', sass.logError)) 
     .pipe(postcss(processors)) 
     .pipe(sourcemaps.write('./maps')) 
     .pipe(gulp.dest(output)); 
    }); 

然而,這又回到了主SASS文件夾,然後就什麼都不做。 我該如何進行修改,以便能夠從任何站點文件夾運行並且只爲該站點執行此操作?

回答

6

如果你想改變當前的工作目錄(CWD)回到你調用gulp的目錄,然後這是行不通的:

process.chdir('./'); 

這是一個相對路徑。相對路徑與CWD有關。但是當你執行process.chdir('./')時,Gulp已經將CWD更改爲你的Gulpfile.js所在的目錄。所以你只是把CWD改成...... CWD。

你可以明確地傳遞給CWD的gulp命令行:

SASS/sites/example-site> gulp --cwd . 

但是,這會招人煩很快。

幸運的是你Gulp stores the original CWDprocess.env.INIT_CWD改變之前。因此,您可以在您的任務中使用以下內容將CWD更改回原始:

process.chdir(process.env.INIT_CWD); 
+1

只想說這是連續兩天你幫我出來,非常感謝!還是得到了一口大口水,大聲笑。 – Xander

+0

'process.env.INIT_CWD'需要以紅色和字體大小100px高亮顯示。謝謝! – Dogoku