gulp快速入門&初體驗

前言

一句話先css

gulp 是一個能夠簡單和自動化"管理"前端文件的構建工具

先說我之前的主要工做,我主要是作遊戲服務端的,用c++/python,因此我對東西的概念理解不免要套到本身作過的技術上,因此有時候有些技術說法對不上,還請看到這篇文章的人指正指正。html

gulp快速入門&初體驗

  • gulp快速入門&初體驗
    • 幹嗎的
    • 爲啥用
    • 咋安裝
    • hello world
    • 簡單用
    • 總結
    • 參考文檔

      幹嗎的

      簡單的說前端

      • 前段構建工具
      • 自動化 管理前端代碼

      gulp 的做用就是幫你處理前端文件, 什麼 js 什麼 html 什麼css 還有json等等前端文件。
      麻溜的!自動的!把本該由你合併壓縮重命名檢查編譯等等一系列操勞的動做,一個命令,一條龍的作齊咯!node

      爲啥用

      顯著的優勢python

      • 顯著提升前段工做效率
      • 學習簡單
      • 使用簡單
      • 安裝簡單
      • 在 node 項目裏質量偏高
      • 插件齊全

      咋安裝

      要在項目裏面使用 gulp 須要安裝兩次, 先全局安裝在本機上, 再安裝在項目裏面c++

      不想看我嘮叨,想直接安裝的 直接看 總結。程序員

      跳轉到總結npm

      安裝 gulp 前的準備

      安裝 node&npm。教程不少, 我給一個還不錯的
      Node.js 安裝配置json

      檢查 node 有沒有安裝成功

      node --versiongulp

      檢查 npm 安裝是否成功

      npm -v
      若是有版本號顯出來就是安裝成功了

      全局安裝

      npm下
      先在機器上全局安裝
      npm install -g gulp
      -g 是指全局安裝
      屏幕快照 2017-02-26 下午7.47.45

      獲得結果

      經過查詢版本看看安裝是否是成功, 若是出現了版本號,那就是成功了
      屏幕快照 2017-02-26 下午7.49.34

      項目安裝

      gulp 畢竟是個 node 項目, 因此你的項目中 node 祖傳的 package.json仍是應有的。

      我知道也有和同樣的node&前端新手, 因此就把 package.json 放上來咯。
      package.json長的啥樣呢 ,就是下面這個樣子

      {
        "name": "neptune",
        "version": "1.0.0",
        "description": "nothing",
        "main": "index.js",
        "scripts": {
          "test": "test"
        },
        "author": "neptune",
        "license": "ISC",
        "devDependencies": {
          "gulp": "^3.9.1",
          "gulp-less": "^3.3.0"
        }
      }

      不要手動去填,node 祖傳的神功大法, 咱們這是個自動化工具
      部署 node 就一發
      npm init
      自動幫你寫 package.json的

      而後,項目裏面安裝 gulp
      npm install gulp -save-dev
      安裝完了 看看,你的項目package.json 多了

      "devDependencies": {
          "gulp": "^3.9.1",
          "gulp-less": "^3.3.0"
        }

      個人項目裏面還有一個 gulp-less 插件, 也是安裝成功了就天然跑進個人 依賴裏面了。

      有的小夥伴就看到本身的工程裏面多了個 node_modules,對,那就是工程中安裝 gulp 後生成的, 你裝了插件,也會在這裏面。好比我安裝的這個 gulp-less 插件.

      gulp目錄下多了 package.json, 這個是 gulp 本身的. 上面咱們 mpn init 是在本身的工程目錄裏面執行的。 生成的 package.json 也是咱們工程本身的, 就是用了 node,因此都上了node 的賊船的意思. 每一個工程都是有本身的 package.json的 。 你安裝一個 gulp-less ,看看裏面也是有一個 package.json的
      屏幕快照 2017-02-26 下午8.10.51

      開始編寫自動化流程

      在項目裏面建立一個名爲 gulpfile.js的文件
      這個文件在我看來, 意義就和在c++項目裏建立了一個 main.cpp 或者 python中main.py ,前端中 index.html同樣。

      而裏面的task就至關於一個個準備好被調用的函數, default就至關於main函數同樣, 是系統默認的入口函數

      總結

      簡單來講, 你在項目安裝 gulp 就須要作四個事情
      1 安裝 node&npm
      Node.js 安裝配置

      2 全局安裝 gulp
      npm install -g gulp
      3 工程初始化 and 安轉 工程gulp
      npm init
      npm install gulp -save-dev
      4 在你工程裏面建立一個 名爲 gulpfile.js 的文件, 開始寫你的 gulp 自動化流程

      hello world

      按照程序員的規定,上一門新的語言技術,先要來發 hello world

      var gulp = require('gulp');
      gulp.task('default',function(){
          console.log('hello world');
      });

      屏幕快照 2017-02-26 下午7.15.08

      var gulp = require('gulp');
      這句很簡單易懂,就是導入 XX 包。
      相似於
      c/c++ 上的 #include 「xxx」
      python 上的 import xx
      xx 語言上的 xx 程序員都懂的

      gulp.task 就至關於定義函數的關鍵字

      default 就至關與 別的程序裏面的 main 函數

      function(){
          console.log('hello world');

      就是一個匿名函數。是個被用爛的概念,就是一個觸發回調,程序員都懂

      咱們很容易就明白了。這個其實就是在 js 這個爸爸語言下實現的子語言。

      咱們在腦殼裏面構想一下。

      程序運行起來,gulp把一大推task,放在一個 blueprint 上面。
      系統在 blueprint 上找到入口函數,也就是 default 函數(就至關於 main 函數)
      而後 gulp 的小火車就跑起來了。

      簡單用

      爲了明白怎麼寫 gulp ,咱們要按部就班的來添加功能,我對上面的 helloworld 逐步的添加功能

      var gulp = require('gulp');
      gulp.task('_task_one', function () {
          console.log('HI, I am task one');
      });
      gulp.task('default',['_task_one'],function(){
          console.log('hello world');
      });

      依賴函數

      上面看到咱們的 default的 task 多了一個參數,
      這個參數咱們能夠稱呼爲依賴函數。
      什麼意思呢,就是,咱們要執行 default 函數前,先的把依賴函數執行咯,咱們這個函數依賴的是_task_one函數,因此咱們在工程下 輸入 gulp命令, 執行起來會獲得。

      [21:22:34] Using gulpfile ~/WebstormProjects/untitled/gulpfile.js
      [21:22:34] Starting '_task_one'...
      HI, I am task one
      [21:22:34] Finished '_task_one' after 129 μs
      [21:22:34] Starting 'default'...
      hello world
      [21:22:34] Finished 'default' after 57 μs
      程序就是先執行完  _task_one 再跑的hello world 的。

      好了有基礎概念了, 咱們就開始幹活把。 複雜的不能作,那就簡單的。 要按部就班啊!

      咱們合併點文件把。畢竟這對前端來講,是再正常不過的了,有時候爲了減小請求次數,減小這些沒必要要網絡損耗,咱們把這些零零碎碎的東西擠在一塊兒。一次請求一個合併的 js 資源,至關於之前的幾個 js 資源

      gulp 插件使用

      安裝插件

      上面我有個 less 的插件,他的安裝和咱們安裝 gulp 同樣簡單
      好比 less 就是
      npm install gulp-less
      那麼咱們的合併插件也是
      npm install --save-dev gulp-concat
      很是簡單。
      咱們去咱們的 package.json裏面看看,能夠看到依賴項多了咱們安裝的"gulp-concat": "^2.6.1",

      "devDependencies": {
          "gulp": "^3.9.1",
          "gulp-concat": "^2.6.1",
          "gulp-less": "^3.3.0"
        }

      咱們用合併插件寫一個處理

      var gulp = require('gulp'),
          concat = require('gulp-concat');     // 導入咱們的合併插件
      
      gulp.task('default',function(){
          gulp.src('testjs/*.js').             // 要處理的一堆 js 文件
          pipe(concat('all.js')).              // 用合併插件處理
          pipe(gulp.dest('dist/'));            // 把處理後的東西放進目標目錄裏面
      });

      個人 testjs 目錄下有個 test1.js 還有一個 test2.js

      屏幕快照 2017-02-26 下午10.02.04
      文件內容是這樣的
      屏幕快照 2017-02-26 下午10.04.00

      好如今執行咱們的 gulp 命令
      屏幕快照 2017-02-26 下午10.05.23
      生成了一個 all.js,裏面是咱們兩個文件的合併

      確定有人疑惑了

      var gulp = require('gulp'),
          concat = require('gulp-concat');     // 導入咱們的合併插件
      
      gulp.task('default',function(){
          gulp.src('testjs/*.js').             // 要處理的一堆 js 文件
          pipe(concat('all.js')).              // 用合併插件處理
          pipe(gulp.dest('dist/'));            // 把處理後的東西放進目標目錄裏面
      });

      看到這裏 你必定會疑惑gulp.src 還有 gulp.dest 是什麼。 你已經理解了gulp 的task 的運做方式,那麼你去 找找資料理解下gulp.dest和gulp.src 也就是分分鐘的事情,咱們程序員,就是有力量! 力量就來自咱們的學習方式。

      這裏我只說下 .pipe是個啥意思。
      pipe 很好理解, 就是類 unix 系統上常用的管道麼。
      好比

      ls-l |grep "某某某" 基本上是咱們用的最多的命令了,若是你會 類 unix 系統。你立刻就明白了。 這個 pipe 就至關於 | 這個管道符號

      若是不瞭解管道咋用的,我也簡單的給說下。 就至關於把 pipe 命令前面程序輸出 output 放在一個文件裏面,再給 pipe 後面的那個命令 當作 輸入 input 來用, 就是說gulp.src('testjs/*.js')這個命令的輸出是我 testjs 目錄下的全部的 js 文件吧,pipe就把這些 js 所有放在一個文件裏面,運行到 pipe(concat('all.js')). 這句的時候,咱們的 concat('all.js') 就從那個文件(其實就是一個匿名管道)裏面讀取(就是 input的過程)全部的 js 文件名字,當作本身input,而後合併成一個 all.js, 這是一種很是常見的進程間通信!還不會的要趕快學會啊。!

      好了,這個也很是簡單。很快咱們就能觸類旁通了吧
      咱們已經合併了js 了,那還有性能優化的空間啊。 對咱們能夠壓縮他!

      開始觸類旁通了!

      咱們按照上面的步奏
      1. 找到咱們須要的插件並安裝
      npm install --save-dev gulp-uglify
      2. 添加壓縮語句到 gulpfile.js 的代碼中去

      var gulp = require('gulp'),
          concat = require('gulp-concat'),
          uglify = require('gulp-uglify');
      
      gulp.task('default',function(){
          gulp.src('testjs/*.js').
          pipe(concat('all.js')).
          pipe(uglify()).
          pipe(gulp.dest('dist/'));
      });
      1. 執行 gulp

        獲得結果

      屏幕快照 2017-02-26 下午10.35.06

      all.js已經被壓縮在一塊兒咯。

      too easy!!! 觸類旁通的時刻就交給本身我的了。

      總結

      gulp 是一種很是容易學習和使用的工具,基本上拿在手上看一下就能直接拿來生產和使用。是每一個前端攻城獅均可以去嘗試的居家旅行殺人越貨必備良器!尚未用的趕快學一學!很是值得!

      參考文檔

      Node.js 安裝配置

      npm 官方文檔

      前端構建工具gulpjs的使用介紹及技巧

  • 相關文章
    相關標籤/搜索