1. 程式人生 > >gulp編譯檔案基本操作集囊

gulp編譯檔案基本操作集囊

一、簡介

        gulp是前端開發過程中對程式碼進行構建的工具,是自動化專案的構建利器;她不盡能對網站資源進行優化,而且在開發過程中很多重複的任務能夠使用正確的工具自動完成;使用她,我們不盡可以很愉快的編寫程式碼,而且大大提高我們的工作效率。

        gulp是基於node.js的自動任務執行器,她能自動化地完成JavaScript/coffee/sass/less/html/image/css等檔案的測試、檢查、合併、壓縮、格式化、瀏覽器自動重新整理、部署檔案生成。並監聽檔案在改動後重復指定的這些步驟。在實現上,她借鑑了lunix作業系統的管道(pipe)思想,前一級的輸出,直接變成後一級的輸入,使得在操作上十分簡單。通過本文,我們將學習如何使用gulp來改變開發流程,從而使開發更加快速高效。

    gulp和grunt非常類似,但相比於grunt的頻繁IO操作,gulp的流操作,能更快更便捷的完成專案構建工作。

二、安裝以及執行
這裡不做介紹,請參考以下連結:

gulp中文文件:https://www.gulpjs.com.cn/docs/getting-started/

gulp詳細教程:http://www.ydcss.com/archives/18#lesson2

三、gulp主要引數

gulp主要引數有.src 、 .watch 、 .dest 、CLI:

gulp.src(globs[, options])

輸出(Emits)符合所提供的匹配模式(glob)或者匹配模式的陣列(array of globs)的檔案。 將返回一個 

Vinyl files 的 stream 它可以被 piped 到別的外掛中。

例如:gulp.task('less', function () {
                  return gulp.src('public/less/*.less')
                       .pipe(less())
                        .pipe(gulp.dest('public/dist'))
           });

 gulp.src返回了stream。

gulp.dest(path[, options])

能被 pipe 進來,並且將會寫檔案。並且重新輸出(emits)所有資料,因此你可以將它 pipe 到多個資料夾。如果某資料夾不存在,將會自動建立它。

gulp.src('./client/templates/*.jade')
  .pipe(jade())
  .pipe(gulp.dest('./build/templates'))
  .pipe(minify())
  .pipe(gulp.dest('./build/minified_templates'));

檔案被寫入的路徑是以所給的相對路徑根據所給的目標目錄計算而來。類似的,相對路徑也可以根據所給的 base 來計算。

gulp.task(name[, deps], fn)

定義一個使用 Orchestrator 實現的任務(task)。

gulp.task('somename', function() {
  // 做一些事
});

name

任務的名字,如果你需要在命令列中執行你的某些任務,那麼,請不要在名字中使用空格。

deps

型別: Array

一個包含任務列表的陣列,這些任務會在你當前任務執行之前完成。

gulp.task('mytask', ['array', 'of', 'task', 'names'], function() {
  // 做一些事
});

注意: 你的任務是否在這些前置依賴的任務完成之前運行了?請一定要確保你所依賴的任務列表中的任務都使用了正確的非同步執行方式:使用一個 callback,或者返回一個 promise 或 stream。

fn

該函式定義任務所要執行的一些操作。通常來說,它會是這種形式:gulp.src().pipe(someplugin())

非同步任務支援

任務可以非同步執行,如果 fn 能做到以下其中一點:

接受一個 callback
// 在 shell 中執行一個命令
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
  // 編譯 Jekyll
  exec('jekyll build', function(err) {
    if (err) return cb(err); // 返回 error
    cb(); // 完成 task
  });
});
返回一個 stream
gulp.task('somename', function() {
  var stream = gulp.src('client/**/*.js')
    .pipe(minify())
    .pipe(gulp.dest('build'));
  return stream;
});
返回一個 promise
var Q = require('q');

gulp.task('somename', function() {
  var deferred = Q.defer();

  // 執行非同步的操作
  setTimeout(function() {
    deferred.resolve();
  }, 1);

  return deferred.promise;
});

注意: 預設的,task 將以最大的併發數執行,也就是說,gulp 會一次性執行所有的 task 並且不做任何等待。如果你想要建立一個序列化的 task 佇列,並以特定的順序執行,你需要做兩件事:

  • 給出一個提示,來告知 task 什麼時候執行完畢,
  • 並且再給出一個提示,來告知一個 task 依賴另一個 task 的完成。

對於這個例子,讓我們先假定你有兩個 task,"one" 和 "two",並且你希望它們按照這個順序執行:

  1. 在 "one" 中,你加入一個提示,來告知什麼時候它會完成:可以再完成時候返回一個 callback,或者返回一個 promise 或 stream,這樣系統會去等待它完成。

  2. 在 "two" 中,你需要新增一個提示來告訴系統它需要依賴第一個 task 完成。

因此,這個例子的實際程式碼將會是這樣:

var gulp = require('gulp');

// 返回一個 callback,因此係統可以知道它什麼時候完成
gulp.task('one', function(cb) {
    // 做一些事 -- 非同步的或者其他的
    cb(err); // 如果 err 不是 null 或 undefined,則會停止執行,且注意,這樣代表執行失敗了
});

// 定義一個所依賴的 task 必須在這個 task 執行之前完成
gulp.task('two', ['one'], function() {
    // 'one' 完成後
});

gulp.task('default', ['one', 'two']);

gulp.watch(glob [, opts], tasks) 或 gulp.watch(glob [, opts, cb])

監視檔案,並且可以在檔案發生改動時候做一些事情。它總會返回一個 EventEmitter 來發射(emit) change 事件。

四、基本外掛操作介紹
1、gulp-less:

    使用gulp-less外掛將less檔案編譯成css,當有less檔案發生改變自動編譯less,並保證less語法錯誤或出現異常時能正常工作並提示錯誤資訊。

1.1、基本使用

JavaScript
12345678vargulp=require('gulp'),less=require('gulp-less');gulp.task('testLess',function(){gulp.src('src/less/index.less').pipe(less()).pipe(gulp.dest('src/css'));});

1.2、編譯多個less檔案

JavaScript
12345678vargulp=require('gulp'),less=require('gulp-less');gulp.task('testLess',function(){gulp.src(['src/less/index.less','src/less/detail.less'])//多個檔案以陣列形式傳入.pipe(less()).pipe(gulp.dest('src/css'));//將會在src/css下生成index.css以及detail.css });

3.3、匹配符“!”,“*”,“**”,“{}”

JavaScript
12345678910vargulp=require('gulp'),less=require('gulp-less');gulp.task('testLess',function(){//編譯src目錄下的所有less檔案//除了reset.less和test.less(**匹配src/less的0個或多個子資料夾)gulp.src(['src/less/*.less','!src/less/**/{reset,test}.less']).pipe(less()).pipe(gulp.dest('src/css'));});

1.4、呼叫多模組(編譯less後壓縮css)

JavaScript
12

相關推薦

gulp編譯檔案基本操作

一、簡介        gulp是前端開發過程中對程式碼進行構建的工具,是自動化專案的構建利器;她不盡能對網站資源進行優化,而且在開發過程中很多重複的任務能夠使用正確的工具自動完成;使用她,我們不盡可以很愉快的編寫程式碼,而且大大提高我們的工作效率。        gulp是

C檔案基本操作

(1)C中檔案的基本使用方式以及相關說明 檔案使用方式以及意義: “rt”只讀開啟一個文字檔案,只允許讀資料  “wt”只寫開啟或建立一個文字檔案,只允許寫資料 “at”追加開啟一個文字檔案,並在檔案末尾寫資料 “rb只讀開啟一個二進位制檔案,只允許讀資料 “wb”只寫開啟

golang 檔案基本操作

import ( "bufio" "fmt" "io" "os" ) //寫入檔案 func WriteFile(path string) { //新建檔案 f, err := os.Create(path) if err != nil { fmt.Println("err=", e

PHP檔案基本操作檔案的上傳和下載

 此篇實現了PHP對檔案的系列操作,包括檔案的讀寫和處理、檔案的上傳、檔案的下載。   1、簡單寫檔案:file_put_contents("檔名","資料字串");//寫資料到檔案 2、簡單讀檔案:$內容1=file_get_contents(“檔名”);//從檔案中讀取內容到內容

Linux檔案基本操作

一、ls ls -l; ls -al; ls -lht;以K為單位的檔案檢視; 檔案第一個符號代表: d:目錄 -:檔案 i:連結檔案 b:塊裝置檔案(介面裝置) c :字元裝置檔案(序列裝置) p:管道檔案 二、檔案讀取 1.cat 讀取純文字檔案 cat bbj.txt cat

VS 2017 檔案基本操作函式

Code #include <iostream> #include <cstdlib> #include <process.h> FILE *stream, *stream1, *stream2; #pragma warning(disable:49

Python檔案基本操作及上下文管理

檔案基本操作 開啟檔案:f = open(fole_name,mode = 'r'),傳入表示檔案路徑的字串,會返回一個檔案物件,mode是檔案開啟模式。 關閉檔案:f.close(),呼叫給定檔案物件的close方法。 檔案開啟模式: r:以只讀方法開啟檔案,檔案指

linux目錄結構及檔案基本操作

linux目錄結構遵循FHS標準 ==tree /==以樹的形式列出根目錄的結構 目錄路徑 cd ~ 切換到使用者目錄, ~ 表示當前使用者的home目錄 cd … 表示切換到上級目錄 pwd 獲取當前路徑 絕對路徑與相對路徑 絕對路徑是以根目錄為參照,相對路

Linux基礎《二》目錄結構以及檔案基本操作

tree /  : 以樹形結構列出   以 . 開頭的檔案都是隱藏檔案,所以這兩個目錄必然也是隱藏的,你可以使用 ls -a 命令檢視隱藏檔案) 建立目錄   mkdir -p father/son/grandson   -- 建立父級目錄 建立檔案 touch 

php檔案基本操作

讀寫基本操作 寫檔案函式:file_put_contents() 語法: int file_put_contents(file,data,mode,context) 引數 描述

Java 實現 HDFS 檔案基本操作

1. pom <hadoop.version>2.7.3</hadoop.version> <dependency> <groupId>org.apache.hadoop</grou

文字檔案基本操作02(C)

準備兩個文字檔案 E78_data1.txt 和 E78_data2.txt, 並將檔案儲存至 C 盤根目錄下的 cdata 資料夾。寫一個程式,將兩個文字檔案 連線成一個文字檔案 E78_result.txt,並將檔案儲存至 C 盤根目錄下的 cdata資料夾。不破壞原始檔

JAVA核心技術I---JAVA基礎知識(檔案系統及java檔案基本操作

一:檔案概述 檔案系統是由OS(作業系統)管理的 檔案系統和Java程序是平行的,是兩套系統 檔案系統是由資料夾和檔案遞迴組合而成 檔案目錄分隔符 –Linux/Unix 用/隔開 –Windows用\隔開,涉及到轉義,在程式中需用/或\\代替 檔案包括檔案裡面的內容和檔案基本屬性 檔案

文字檔案基本操作01(C)

手工編輯一個文字檔案 E76_data.txt, 並將檔案儲存至 C 盤根目錄下的 cdata 資料夾,編寫程式將檔案複製到 C 盤根目錄下的 cdata 資料夾中的文字檔案 E76_result.txt。 /*=============================

python中檔案基本操作命令及注意事項

我們如果想通過程式去修改檔案的名字、刪除檔案或資料夾、獲得路徑下的檔案列表等等操作,python提供了有關這些操作的模組(os模組),需要匯入模組import os. 修改檔名字,刪除檔案:目錄相關

java之檔案基本操作

package com.bnc.www; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; imp

gulp安裝以及基本操作

var gulp = require('gulp'); //刪除 var del = require('del'); // 常用外掛 // 壓縮javascript檔案,減小檔案大小 var uglify = require('gulp-uglify'); // 檔案重新命名

Linux:目錄&檔案基本操作

- 表示上一次所在目錄,~ 通常表示當前使用者的"home"目錄。使用 pwd 命令可以獲取當前所在路徑(絕對路徑)。 新建檔案:touch test建立目錄:mkdir -p father/son/grandson複製檔案:cp test father/son/grandson複製目錄:cp -r fat

檔案基本操作(一)

一、1 什麼是檔案?    檔案是作業系統為使用者或應用程式提供的一個讀寫硬碟的虛擬單位    檔案的操作核心就是:讀、寫    即我們只需要對於進行讀寫操作,就是對作業系統發起請求,然後由作業系統將使用者或者應用程式    對檔案的讀寫操作轉換成具體的硬碟指令(比如控制碟片

python3 csv檔案基本操作

csv(Comma-Separated Values),也叫逗號分割值,如果你安裝了excel,預設會用excel開啟csv檔案。 廢話少說直接貼程式碼: import csv # 開啟檔案,用wi