gulp學(xué)習(xí) css篇

gulp css篇(sass為例)

有時候我們在編寫css的時候图焰,經(jīng)常會需要重復(fù)編寫一些元素的屬性或者相同的父級元素兄朋,于是我們就有了各種各樣的CSS預(yù)處理器讓我們可以省去這些煩惱,更高效的編寫,然而越寫越多以后,我們就需要手動導(dǎo)入或者編譯各種各樣的sass文件,寫完之后為了優(yōu)化性能久窟,我們還需要去壓縮css文檔,讓它加載的更快本缠,于是gulp的出現(xiàn)讓css的處理更加自動化和高效斥扛,本篇主要寫的是,如何導(dǎo)入sass文件丹锹,編譯成css并壓縮到指定路徑稀颁。

  • 相關(guān)插件
    • node-sass
    • cssnano
    • wiredep
    • gulp-inject
    • browser-sync
  • 目錄
    |_app
        |_index.html
        |_css
            |_main.css
            |_style.css
        |_sass
            |_main.scss
            |_style.scss
    |_dist
        |_index.html
        |_css
            |_main.css
            |_style.css
    |_gulpfile.js
  • 達成目標(biāo)
    • sass文件之間的導(dǎo)入
    • sass編譯成css
    • css經(jīng)過壓縮到達dist區(qū)域
    • css自動導(dǎo)入html文件中
    • 導(dǎo)入bootstrap框架

目標(biāo)一:css自動導(dǎo)入html文件中

使用gulp-inject即可,第一步是在index.html做好標(biāo)記

    <!-- inject:css -->
    <!-- endinject -->

第二步是用gulpfiles文檔中添加一個名為styles的task

var inject = require('gulp-inject');//安裝相關(guān)依賴

gulp.task('index', function () {
  var target = gulp.src('app/index.html');
  //并不需要read讀取內(nèi)容楣黍,只需要路徑就可以了匾灶,這樣可以加快運行速度
  var sources = gulp.src(['./dist/js/*.js', './dist/css/*.css'], {read: false});
  return target.pipe(inject(sources,{relative: true}))//relative保證了我們可以去除根目錄的dist/
    .pipe(gulp.dest('./dist'));//最后將導(dǎo)入后完整的index.html放到dist中
});

最后在dist目錄下會生成一個完整的index.html,其中的標(biāo)記為

    <!-- inject:css -->
    <link rel="stylesheet" href="../dist/css/styles.css">
    <!-- endinject -->

目標(biāo)二:sass編譯成css

sass編譯成css是十分簡單的租漂,只需要使用sass()就可以了
var sass = require('gulp-sass');
gulp.src('app/scss/main.scss')
    .pipe(sass())//編譯scss到css文件夾
    .pipe(gulp.dest('app/css'))

目標(biāo)三:css的壓縮

這個也是很簡單的阶女,只需要用cssnano這個插件就可以了

var cssnano = require('cssnano');

gulp.src('app/scss/main.scss')
    .pipe(cssnano())//壓縮css文件夾到dist文件夾
    .pipe(gulp.dest('dist/css'))

目標(biāo)四:sass文件之間的導(dǎo)入

我們知道sass文件的導(dǎo)入,一般會是@import 'filepath';哩治,而在gulp中我們需要用到inject插件導(dǎo)入sass秃踩,其中會用到inject的一個自定義標(biāo)簽插入和匿名函數(shù)來創(chuàng)造相應(yīng)的格式,例如這里我們要將app中的styles.scss導(dǎo)入main.scss中

var inject = reuire('gulp-inject');
var sources = gulp.src('app/scss/styles.scss');
    gulp.src('app/scss/main.scss')
        .pipe(inject(sources, {
            starttag: '//inject:app',
            endtag: '//endinject',
            transform: function (filepath) {
              return '@import"' + filepath + '";';
            },
            addRootSlash: false
          }))

然后同時我們會需要在main.scss中創(chuàng)造一個類似于上面目標(biāo)一index.html中的label

//inject:app
//endinject

最后在terminal運行后,就會在main.scss中成功導(dǎo)入了scss文件

//inject:app
@import"app/scss/styles.scss";
//endinject

目標(biāo)五:導(dǎo)入bootstrap框架

目前為止业筏,我們學(xué)會如何通過sass文件導(dǎo)入編譯成css并將其壓縮到合適的位置憔杨,接下來我們會學(xué)習(xí)如何導(dǎo)入boorstrap框架,在這之前蒜胖,我們會用到一個新的東西消别,叫bower抛蚤,和npm很類似,這是一個前端框架的包管理器妖啥,而bootstrap正是通過它來導(dǎo)入的霉颠。
首先我們初始化bower
bower init
然后对碌,安裝我們所需要的框架
bower install bootstrap-sass --save
然后我們會用到叫做wiredep的插件荆虱,和inject很類似,只不過它是用來導(dǎo)入和bower相關(guān)的庫或者框架的朽们。
npm install wiredep --save-dev
只需要在代碼中

var wiredep = require('wiredep').stream;
    gulp.src('app/scss/main.scss')
    .pipe(wiredep())
    .pipe(gulp.dest('app/scss')

并在main.scss中加上label

// bower:scss
// endbower

運行后變產(chǎn)生

// bower:scss
@import "../../bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss";
// endbower

完成代碼

var gulp = require('gulp');
var sass = require('gulp-sass');
var inject = require('gulp-inject');
var wiredep = require('wiredep').stream;

gulp.task('styles', function() {
  var sources = gulp.src('app/scss/styles.scss', {read: false});
  return gulp.src('app/scss/main.scss')
        .pipe(wiredep())
        .pipe(inject(sources, {
            starttag: '//inject:app',
            endtag: '//endinject',
            transform: function (filepath) {
              return '@import"' + filepath + '";';
            },
            addRootSlash: false
          }))
        .pipe(gulp.dest('app/scss'))
        .pipe(sass())//編譯scss到css文件夾
        .pipe(gulp.dest('app/css'))
        .pipe(cssnano())//壓縮css文件夾到dist文件夾
        .pipe(gulp.dest('dist/css'))
        .pipe(browserSync.reload({//保存后自動刷新瀏覽器
          stream: true
        }));
});

gulp.task('index', function () {
  var target = gulp.src('app/index.html');
  //并不需要read讀取內(nèi)容怀读,只需要路徑就可以了,這樣可以加快運行速度
  var sources = gulp.src(['./dist/js/*.js', './dist/css/*.css'], {read: false});
  return target.pipe(inject(sources,{relative: true}))//relative保證了我們可以去除根目錄的dist/
    .pipe(gulp.dest('./dist'));//最后將導(dǎo)入后完整的index.html放到dist中
});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骑脱,一起剝皮案震驚了整個濱河市菜枷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叁丧,老刑警劉巖啤誊,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拥娄,居然都是意外死亡蚊锹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門稚瘾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牡昆,“玉大人,你說我怎么就攤上這事摊欠《妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵些椒,是天一觀的道長播瞳。 經(jīng)常有香客問我,道長免糕,這世上最難降的妖魔是什么赢乓? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮说墨,結(jié)果婚禮上骏全,老公的妹妹穿的比我還像新娘。我一直安慰自己尼斧,他們只是感情好姜贡,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棺棵,像睡著了一般楼咳。 火紅的嫁衣襯著肌膚如雪熄捍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天母怜,我揣著相機與錄音余耽,去河邊找鬼。 笑死苹熏,一個胖子當(dāng)著我的面吹牛碟贾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轨域,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袱耽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干发?” 一聲冷哼從身側(cè)響起朱巨,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枉长,沒想到半個月后冀续,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡必峰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年洪唐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片自点。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桐罕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桂敛,到底是詐尸還是另有隱情功炮,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布术唬,位于F島的核電站薪伏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粗仓。R本人自食惡果不足惜嫁怀,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望借浊。 院中可真熱鬧塘淑,春花似錦、人聲如沸蚂斤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捌治,卻和暖如春岗钩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肖油。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工兼吓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人森枪。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓视搏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疲恢。 傳聞我的和親對象是個殘疾皇子凶朗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在現(xiàn)在的前端開發(fā)中,前后端分離显拳、模塊化開發(fā)、版本控制搓萧、文件合并與壓縮杂数、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,439評論 1 32
  • 安裝Gulp首先需要安裝Node.js,并在控制臺輸入$ npm install gulp -gMac端需要寫成$...
    LaBaby_閱讀 915評論 0 1
  • 原文標(biāo)題:Gulp for Beginners作者: Zell Liew翻譯:治電小白菜原文地址:https://...
    ZZES_ZCDC閱讀 1,581評論 6 18
  • 參照Gulp for Beginners來學(xué)習(xí)Gulp基本內(nèi)容瘸洛。以下為學(xué)習(xí)記錄筆記揍移。 安裝Gulp 首先需要安裝N...
    JenniferYe閱讀 2,533評論 1 17
  • 前言 本文默認你已經(jīng)安裝好node環(huán)境,并且熟悉node命令反肋,和window cd命令那伐。 gulp簡介 基于nod...
    9I閱讀 1,983評論 4 50