Web前端構建工具版本號管理方案思考
前端構建工具滿天飛的情景下,筆者也忍不住去搗鼓了一下,真正體驗一下NODEJS帶來的魅力,經過一段時間規劃設計,終於將平臺工具搗鼓出來了。在裡面也體驗了express, socket.io, grunt等node外掛服務,使用很流暢,並且很好的完了我的基本需求(JS\CSS\IMAGE的壓縮和自動部署功能)。
雖然基本功能完成,但是還有一個讓人容易忽略而又重要的問題來了,就是資原始檔的版本號的問題。在這裡用的是SeaJS來做的模組管理,也在網上搜集了一下關於這塊的資料。大致有以下兩種方案:
1、 配置SeaJS的map物件。很方便,集中管理,但是也存在一些問題,比如:map物件的維護、配置檔案引用頁面的時間戳問題。
2、 生成檔案sign,替換原有檔案的名。這裡不用考慮頁面引用的時間戳問題,但是需要對資源及頁面做一次全文查詢替換,這對於分散部署的情況下將會非常複雜。
看了上面兩種方案後,感覺在我的場景下還存在一些不足之處。筆者想要的是不影響開發情況下,開發人員完全不用考慮檔案被快取問題,只需完成編碼,提交到構建系統後,一鍵完成構建和部署。
確定好目標後,既然不想讓開發同學關心時間戳問題,那麼是否可以將這個工作交給Web伺服器來做呢?那麼交給伺服器來做之後,如何動態的更新最新的資原始檔呢?
有問題就好解決,將問題丟擲來之後,方案也漸進呈現出來,不囉嗦了,直接上筆者的實現方案:
構建工具動態生成.htaccess檔案,將構建的資原始檔的URL重寫列表同步到.htaccess檔案中以達到由伺服器動態獲取新的資原始檔。
(備註:筆者是在apache環境下,對IIS\NGINX\TOMCAT\RESIN\JBOSS等環境還需要再研究研究。)
看了上面的方案是不是很簡單,那具體是怎麼做的呢?筆者也在這裡列一下。
1. 構建工具在構的時候生成一個與filename.ext對應的filename.ext.sha1的檔案,這個.sha1的檔案存放filename.ext檔案的sha1值。
2. 在構建完成後,構建工具讀取.htaccess的模板,並且遍歷得到所有資原始檔的列表,生成一個對filename.ext對應的filename.ext.sign的檔案。
3. 按規則生成RewriteCond和RewriteRule。並將規則資料寫到.htaccess檔案中並部署到資原始檔站點的根據目錄。
Web前端開發 前端開發工具 NodeJS
圖一:構建工具基本結構圖
Web前端開發 前端開發工具 NodeJS
圖二:構建後的檔案列表
Web前端開發 前端開發工具 NodeJS
圖三:生成一條Rule
Web前端開發 前端開發工具 NodeJS
圖四:生成後的.htaccess檔案
OK,到這裡基本告一段落了,資源版本號解決了。但是對於效能影響這塊還需要觀察,待有時間再研究。
雖然基本功能完成,但是還有一個讓人容易忽略而又重要的問題來了,就是資原始檔的版本號的問題。在這裡用的是SeaJS來做的模組管理,也在網上搜集了一下關於這塊的資料。大致有以下兩種方案:
1、 配置SeaJS的map物件。很方便,集中管理,但是也存在一些問題,比如:map物件的維護、配置檔案引用頁面的時間戳問題。
2、 生成檔案sign,替換原有檔案的名。這裡不用考慮頁面引用的時間戳問題,但是需要對資源及頁面做一次全文查詢替換,這對於分散部署的情況下將會非常複雜。
看了上面兩種方案後,感覺在我的場景下還存在一些不足之處。筆者想要的是不影響開發情況下,開發人員完全不用考慮檔案被快取問題,只需完成編碼,提交到構建系統後,一鍵完成構建和部署。
確定好目標後,既然不想讓開發同學關心時間戳問題,那麼是否可以將這個工作交給Web伺服器來做呢?那麼交給伺服器來做之後,如何動態的更新最新的資原始檔呢?
有問題就好解決,將問題丟擲來之後,方案也漸進呈現出來,不囉嗦了,直接上筆者的實現方案:
構建工具動態生成.htaccess檔案,將構建的資原始檔的URL重寫列表同步到.htaccess檔案中以達到由伺服器動態獲取新的資原始檔。
(備註:筆者是在apache環境下,對IIS\NGINX\TOMCAT\RESIN\JBOSS等環境還需要再研究研究。)
看了上面的方案是不是很簡單,那具體是怎麼做的呢?筆者也在這裡列一下。
1. 構建工具在構的時候生成一個與filename.ext對應的filename.ext.sha1的檔案,這個.sha1的檔案存放filename.ext檔案的sha1值。
2. 在構建完成後,構建工具讀取.htaccess的模板,並且遍歷得到所有資原始檔的列表,生成一個對filename.ext對應的filename.ext.sign的檔案。
3. 按規則生成RewriteCond和RewriteRule。並將規則資料寫到.htaccess檔案中並部署到資原始檔站點的根據目錄。
Web前端開發 前端開發工具 NodeJS
圖一:構建工具基本結構圖
Web前端開發 前端開發工具 NodeJS
圖二:構建後的檔案列表
Web前端開發 前端開發工具 NodeJS
圖三:生成一條Rule
Web前端開發 前端開發工具 NodeJS
圖四:生成後的.htaccess檔案
OK,到這裡基本告一段落了,資源版本號解決了。但是對於效能影響這塊還需要觀察,待有時間再研究。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30025151/viewspace-1352595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於程式碼版本管理的思考和建議
- 響應式方案調研及前端開發管理思考前端
- 【深度好文】我在做前端構建過程中的思考前端
- 使用Gulp構建前端自動化解決方案前端
- 前端埋點統計方案思考前端
- [轉]Web專案管理思考Web專案管理
- 程式的版本號管理
- web前端學習方案Web前端
- 構建web前端異常監控系統–FdSafeWeb前端
- Web前端框架與類庫的思考Web前端框架
- 前端微服務化解決方案4-新模組構建前端微服務
- 前端構建_webpack前端Web
- 基於開源軟體構建儲存解決方案的思考
- 構建基於 iOS 模擬器的前端除錯方案iOS前端除錯
- 用前端表格技術構建醫療SaaS 解決方案前端
- 前端構建大法Gulp系列(一):為什麼需要前端構建前端
- Web前端架構師Web前端架構
- 【js】版本號對比處理方案JS
- 前端構建祕籍前端
- 學習Web前端要了解的2種流行構建工具!Web前端
- web前端新手入門建議Web前端
- 大前端架構思考與選擇前端架構
- 使用 GVM 工具管理 Go 版本Go
- Web 前端開發日誌(四):構建現代化 Node 應用Web前端
- Maven Web專案構建MavenWeb
- 構建Web API服務WebAPI
- Web Bundler CheatSheet, 選擇合適的構建打包工具Web
- 從0到1構建基於自身業務的前端工具庫前端
- web前端開發工具有哪些Web前端
- 各式Web前端開發工具整理Web前端
- 前端同構渲染的思考與實踐前端
- web前端開發工具有哪些?8個好用的web前端開發常用工具Web前端
- 金融案例:構建高效統一的需求登記與管理方案
- 前端思考前端
- 前端構建:3類13種熱門工具的選型參考前端
- RVM ruby版本管理工具
- 構建單頁Web應用Web
- 構建前端mock伺服器前端Mock伺服器