初識gulp

来源:https://www.cnblogs.com/jjq-exchange/archive/2018/05/31/9116604.html
-Advertisement-
Play Games

之前一段時間學習使用了gulp自動化構建工具,併在現在使用的項目上部署使用,同時在這做個筆記進行小結,以便加深記憶,如有理解錯誤的地方請不吝賜教 gulp 的解釋我就不多說了 這裡引用官網的一句話 Gulp.js 是一個自動化構建工具,開發者可以使用它在項目開發過程中自動執行常見任務,提高開發效率 ...


    之前一段時間學習使用了gulp自動化構建工具,併在現在使用的項目上部署使用,同時在這做個筆記進行小結,以便加深記憶,如有理解錯誤的地方請不吝賜教

    gulp 的解釋我就不多說了 這裡引用官網的一句話    Gulp.js 是一個自動化構建工具,開發者可以使用它在項目開發過程中自動執行常見任務,提高開發效率

    在這我多使用gulp進行JS壓縮,css壓縮,同時其還能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合併、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動後重覆指定的這些步驟,下麵我就不多說了直接上手如何使用gulp

    1.首先當然是要安裝一個node,gulp是具於node的所以這是最基礎的一步

    你可以去node官網下載一個版本node安裝,鏈接http://nodejs.cn/(這裡我使用的node均在window系統下);

    2.使用命令行進行gulp安裝下載,

    1).這裡就稍微記錄下node下常用的一點命令行

        node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。

        npm -v查看npm的版本號,npm nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等)。

        cd定位到目錄,用法:cd + 路徑 ;

        dir列出文件列表;

        cls清空命令提示符視窗內容。

        

      2)安裝gulp

        2.1.首先全局安裝gulp,目的通過其執行gulp任務,安裝命令為:(npm install gulp -g),查看是否安裝成功(gulp -v)出現版本號即為成功;

        2.2.新建一個package.json文件,當然你也可以使用(npm init)來創建一個package.json文件。

          下麵以手動創建為例

{
  "name": "test",   //項目名稱(必須)
  "version": "1.0.0",   //項目版本(必須)
  "description": "This is for study gulp project !",   //項目描述(必須)
  "homepage": "",   //項目主頁
  "repository": {    //項目資源庫
    "type": "git",
    "url": "https://git.oschina.net/xxxx"
  },
  "author": {    //項目作者信息
    "name": "xxx",
    "email": "[email protected]"
  },
  "license": "ISC",    //項目許可協議
  "devDependencies": {    //項目依賴的插件
    "gulp": "^3.8.11",
    "gulp-less": "^3.0.0"
  }
}
 

        2.3.在使用的目錄下安裝gulp(npm install --save-dev gulp),

        2.4.在項目的根目錄新建一個gulpfile.js文件

1 var gulp = require('gulp');
3 gulp.task('gulps', () => {
4     return //需要執行的代碼
5 });
8 
9 然後在cmd中使用 gulp gulps  執行

      3.一些api解釋

 1 var gulp = require('gulp');
 2 var cleanCSS = require('gulp-clean-css');
 3 var minJs = require('gulp-uglify');
 4 var rev = require('gulp-rev') ;
 5 var rename = require('gulp-rename');//重名名
 6 
 7 示例壓縮css,
 8     /*task 定義一個gulp任務,含三個個參數,
 9            第一個參數為任務名,必填;
10            第二個參數為依賴的任務,選填,
11            第三個為回調函數裡面執行的是必要的插件操作,必填
12      src 為指定文件路徑,可使用正則匹配
13      dest 指定輸出位置,
15     */
16 gulp.task('total-css', () => {
17     return gulp.src('Public/static/css/home/newKdBeiFen/*.css')
18         .pipe(rename({suffix:'.min'}))
19         .pipe(cleanCSS({ compatibility: 'ie8' }))
20         .pipe(gulp.dest('Public/static/css/home/monicss/'));
21 });        
22 /*watch用於監聽文件發生變化,文件發生改變就會執行該處指定的任務*/
23 gulp.task('watch',function(){
24     gulp.watch('Public/static/css/home/newKdBeiFen/*.css',['total-css']);
25 })

 

  3.下麵記錄的均為gulp 的常用插件安裝   以下使用均為(npm install 插件名 --save-dev

      gulp-load-plugins :自動載入 package.json 中的 gulp 插件,避免一個個require插

      gulp-rename: 重命名

      gulp-uglify:文件壓縮

      gulp-concat:文件合併

      gulp-less:編譯 less

      gulp-clean-css:壓縮 CSS 文件

      gulp-htmlmin:壓縮 HTML 文件

      gulp-babel: 使用 babel 編譯 JS 文件

      gulp-jshint:jshint 檢查

      gulp-rev添加時間戳

      gulp-rev-collector:替換html中的link,srcipt

      gulp-run-sequence:同步執行

      gulp-imagemin:壓縮jpg、png、gif等圖片

      gulp-livereload:當代碼變化時,它可以幫我們自動刷新頁面,除在模塊中需要安裝外,還需要在瀏覽器中安裝。

  使用示參考

    

下麵方法來自百度的參考感謝大佬的分享,
像我這項目一般緩存都為幾年所以我們需要加入?xxx清除緩存,以css文件為例
/引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rev = require('gulp-rev'), revCollector = require('gulp-rev-collector');//CSS生成文件hash編碼並生成 rev-manifest.json文件名對照映射 gulp.task('revCss', function(){ return gulp.src('Public/static/css/home/newKdBeiFen/*.css')
.pipe(rev()) .pipe(rev.manifest()) .pipe(gulp.dest(
'Public/static/css/home/monicss/'));
});//Html替換css文件版本 gulp.task('revHtml', function () { return gulp.src(['rev/**/*.json', 'View/*.html']) .pipe(revCollector()) .pipe(gulp.dest('View')); }); //按順序執行 gulp.task('dev', function (done) { condition = false; runSequence( ['revCss'], ['revHtml'], done); }); gulp.task('default', ['dev']); //在cmd 執行gulp default

此時我們生成的並不是我們所需的樣子,需要再去源文件處修改一些代碼

打開node_modules\gulp-rev\index.js 第144行 manifest[originalFile] = revisionedFile; 更新為: manifest[originalFile] = originalFile + '?v=' + file.revHash;


打開nodemodules\gulp-rev\nodemodules\rev-path\index.js 10return filename +'-'+ hash + ext; 更新為: return filename + ext;


打開node_modules\gulp-rev-collector\index.js 31if ( !_.isString(json[key]) || path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !== path.basename(key) ) { 更新為: if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {


打開node_modules\gulp-rev-collector\index.js 第107行 regexp: new RegExp( '([\/\\\\\'"])' + pattern, 'g' ), 更新為: regexp: new RegExp( '([\/\\\\\'"])' + pattern+'(\\?v=\\w{10})?', 'g' ),


生成
<linkrel="stylesheet"href="../css/default.css?v=5a636d79c4">
    <script src="../js/app.js?v=3a0d844594"></script>

 

 

 

      

 

        

        

 

 

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前戲 到目前為止,我們已經學過了JavaScript的一些簡單的語法。但是這些簡單的語法,並沒有和瀏覽器有任何交互。 也就是我們還不能製作一些我們經常看到的網頁的一些交互,我們需要繼續學習BOM和DOM相關知識。 JavaScript分為 ECMAScript,DOM,BOM。 BOM(Browse ...
  • 1、JavaScript概述 2、JavaScript引入方式 3、JavaScript語言規範 4、JavaScript語言基礎 5、JavaScript數據類型 6、JavaScript運算符 7、JavaScript流程式控制制 8、JavaScript函數 9、JavaScript詞法分析 10 ...
  • 在CSS中,值的類型有很多種,一些很常見,一些你卻幾乎沒怎麼遇到過。我們不會在這篇文檔中面面俱到地描述他們,而只是這些對於掌握CSS可能最有用處的這些。本文將會涉及如下CSS的值: * 數值: 長度值,用於指定例如元素寬度、邊框(border)寬度或字體大小;以及無單位整數。用於指定例如相對線... ...
  • 一、 網頁佈局方式 二、 標準流 三、 浮動流 四、 定位流 一、 網頁佈局方式 1、什麼是網頁佈局方式 佈局可以理解為排版,我們所熟知的文本編輯類工具都有自己的排版方式, 比如word,nodpad++等等 而網頁的佈局方式指的就是瀏覽器這款工具是如何對網頁中的元素進行排版的 2、網頁佈局/排版的 ...
  • 前提 es6寫法的類方法預設沒有綁定this,不手動綁定this值為undefined。 因此討論以下幾種綁定方式。 一、構造函數constructor中用bind綁定 二、在調用的時候使用bind綁定this 三、在調用的時候使用箭頭函數綁定this 四、使用屬性初始化器語法綁定this 附加:: ...
  • CSS 聲明 給 CSS 屬性設置特定的值是 CSS 語言的核心功能。 CSS 引擎會通過計算,將對應的 CSS 聲明應用到頁面的每一個元素上,從而使得元素們以適當的方式佈局,並展示出適當的樣式。 特別需要記住的是: * CSS 的屬性和屬性值都是區分大小寫的。 * 屬性和屬性值之間,用英文半形冒號... ...
  • 微信客戶端在打開小程式之前,會把整個小程式的代碼包下載到本地。 緊接著通過 app.json 的 pages 欄位就可以知道你當前小程式的所有頁面路徑: { "pages":[ "pages/index/index", "pages/logs/logs" ] } 這個配置說明在 QuickStart ...
  • function isIE(){ var userAgent = navigator.userAgent, rMsie = /(msie\s|trident.*rv:)([\w.]+)/, rFirefox = /(firefox)\/([\w.]+)/, rOpera = /(opera).+ve... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...