1. 程式人生 > >gulp自動化新增版本號並修改為引數格式

gulp自動化新增版本號並修改為引數格式

問題:

  1. 當我們修改js和css檔案時往往需要清除瀏覽器的快取,否則有些效果就看不到更新過後的。
  2. 通過對js,css檔案內容進行hash運算,生成一個檔案的唯一hash字串(如果檔案修改則hash號會發生變化)
  3. 替換html中的js,css檔名,生成一個帶版本號的檔名,這樣加版本號的靜態檔案就不會存在快取的問題了。

解決:

  1. gulp有自動化新增版本hash的外掛gulp-rev,它的效果是更改檔名,如下
     <link rel="stylesheet" href="./css/jquery.e-calendar-de29b48f93.css">
    <link
rel="stylesheet" href="./css/base-8688d776d1.css">
<link rel="stylesheet" href="./css/style-93423ee3ca.css">

gulp直接更改了檔名,而我們想要的效果則是下面這種新增版本號。

     <link rel="stylesheet" href="./css/jquery.e-calendar.css?v=de29b48f93">
    <link rel="stylesheet" href="./css/base.css?v=8688d776d1">
<link rel="stylesheet" href="./css/style.css?v=93423ee3ca">
  1. 所以我們需要更改一下gulp的檔案,更改gulp-rev和gulp-rev-collector

開啟node_modules\gulp-rev\index.js

  • 第144行 manifest[originalFile] = revisionedFile; 更新為:
    manifest[originalFile] = originalFile + ‘?v=’ + file.revHash;

開啟nodemodules\gulp-rev\nodemodules\rev-path\index.js

  • 10行 return filename + ‘-’ + hash + ext;
  • 更新為: return filename + ext;

開啟node_modules\gulp-rev-collector\index.js

  • 31行if ( !_.isString(json[key]) ||path.basename(json[key]).replace(new RegExp( opts.revSuffix ), ” )
  • 更新為: if ( !_.isString(json[key]) || path.basename(json[key]).split(‘?’)[0] !== path.basename(key) ) {
    可能你會找不到這一句沒關係,把40行按下修改
 let cleanReplacement =  path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' );
 修改為:
 let cleanReplacement =  path.basename(json[key]).split('?')[0];

再執行gulp命令,得到的結果如下(效果正確):

<link rel="stylesheet" href="../css/default.css?v=803a7fe4ae">
<script src="../js/app.js?v=3a0d844594"></script>

相關推薦

gulp自動化新增版本修改引數格式

問題: 當我們修改js和css檔案時往往需要清除瀏覽器的快取,否則有些效果就看不到更新過後的。 通過對js,css檔案內容進行hash運算,生成一個檔案的唯一hash字串(如果檔案修改則hash號會

gulp自動新增版本

1.安裝Gulp npm install --save-dev gulp 2.分別安裝gulp-rev、gulp-rev-collerctor npm install --save-dev gulp-

修復BUG:gulp自動新增版本修復對CSS中background:url()的匹配問題

前天說要找到一個完美的解決方案,今天發動了各路大神,總算是搞定了.問題描述: 修改gulp-rev-append外掛實現自動修改檔案中靜態資源連結新增md5版本號。但是前天有一點點很遺憾,對CSS中background:url()的匹配還存在一點點不足,url()必須帶單引

Gulp開發:Gulp自動新增版本

"/css/style.css" => "/dist/css/style-1d87bebe.css" "/js/script1.js" => "/dist/script1-61e0be79.js" "cdn/image.gif" =>

一次專案中Gulp的使用(壓縮、新增版本自動化打包)

一次專案中Gulp的使用 Gulp的準備工作 安裝Gulp 專案中初始化gulp 編寫gulp指令碼 打包結果 拓展 Gulp的準備工作 前段時間接手一個war專案,springmvc 前端

使用gulp專案中的檔案自動新增版本之實踐思路

需要用到的Gulp外掛:1、gulp-rev2、gulp-rev-format3、gulp-rev-replace要實現html中增加版本號的效果:<link rel="stylesheet" href="/Public/css/lib/base.css?v=14780

使用gulp對引用的檔案新增版本

cnpm install —-save-dev gulp cnpm install --save-dev gulp del cnpm install gulp-uglify gulp-uglify gulp-minify-css gulp-rev gulp-re

使用前端構建工具批量頁面中引用的js檔案新增版本的歷程

近日遇到有客戶反應,頁面開啟顯示不正常,不能完全的顯示出頁面。細問之下才得知,原來是有一個js檔案修改了一個方法,但是上線後由於瀏覽器快取的原因,還是載入的舊js檔案,導致頁面顯示不正常了。給客戶解釋由於系統更新,需要強制重新整理才可以。這天陸續又有客戶反映遇到此問題,而有

使用 MANIFEST.MF 檔案打包新增版本

在打好的 ear 包中,MANIFEST.MF 檔案會出現在 /META-INF 中,如果沒有可以手動建立,新增以下文字即可 Manifest-Version: 1.0 Weblogic-Application-Version: 8.051

VS中實時獲取SVN的版本寫入到AssemblyInfo.cs中(C#)

art csharp style eve avi exec format sharp 匹配 原文:VS中實時獲取SVN的版本號並寫入到AssemblyInfo.cs中(C#)

Android系統新增新輸入法預設輸入法

由於產品需求,需將Android原生輸入法先後替換成搜狗輸入法、百度輸入法、谷歌拼音輸入法,本文以替換為谷歌輸入法為例。  packages/apps下新建資料夾,將需替換的第三方輸入法apk放入該資料夾,編寫Android.mk檔案,一谷歌輸入法為例,如下: LOCAL_

vue 用webpack打包檔名新增版本

因瀏覽器快取原因導致vue 打包的檔案 導致偶爾會出現不能即使更新最新程式碼。因此在打包的檔名中新增一個版本號以便瀏覽器能區分。 解決方法:找到webpack .prod.conf.js    1.定義版本變數: const  Version

linux 程式、動態庫、靜態庫內部新增版本和編譯時間

給程式和庫新增版本號和庫,有利於維護和升級。 當然你可以在檔名上體現,比如有個程式叫 yun,檔名寫為 yun_1.0.2,但這個需要每次手動維護,而且不能100%確保當前程式就是那個版本。所以,把版本號體現在程式內部,是一個不錯的選擇。 --------------------------

Android app版本修改

再app的build.gradle中 android { compileSdkVersion 24 buildToolsVersion "24.0.3" defaultConfig { applicationId "com.orbbe

linux安裝ruby修改國內映象庫

一、線上安裝:     方式一:此方式版本才2.0,對於某些場景使用不了,比如redis-trib.rb……                 安裝比較簡單:直接命令yum install -y ruby。    方式二(推薦):修改yum映象源後安裝高版本直接命令  

maven獲取svn版本輸出到MANIFEST.MF的兩種方法

方法一: <scm> <connection>scm:svn:svn://127.0.0.1/src/trunk</connection> <

安裝MySQL(8.0.12版本修改密碼

2、安裝在本機“D:mysql”:解壓zip檔案後將解壓得到的資料夾內的全部檔案拷貝到D盤的mysql資料夾下即可。 3、建立mysql.ini檔案,放在D:mysql檔案下即可,檔案內容為: [mysqld] # 設定3306埠 port=3306 # 設定my

Gradle自動設定版本修改apk字尾

直接上配置檔案 import java.text.SimpleDateFormat apply plugin: 'com.android.application' def verName = "1.0.0" def buildTime() {

Ranorex獲取被測程式(.exe)的版本輸出到報告

       Ranorex是一款自動化測試工具,集移動端、web、桌面程式為一體的,很強大及使用靈活。具體可網上下載學習。但目前使用的使用者不多,是收費版的,但網上有破解版可使用。       上一遍我寫了怎麼獲取SVN的版

自動獲取svn版本替換android版本

使用svn作為軟體版本號的好處是一旦軟體出現問題可以定位到具體的原始碼,android應用的版本是在AndroidManifest.xml中定義的,每次打包釋出的前需要手動修改其中的androi