摘要:自動化打包上文章概述本文分為上下兩篇,上篇主要介紹一些常用的插件也是此次打包主要用的插件,而下篇主要以一個項目為例,從本地出合適的版本,壓縮合并到最后打成包,發送至指定目錄,做一個全面的演示。
gulp自動化打包(上) 文章概述
本文分為上下兩篇,上篇主要介紹一些常用的gulp插件(也是此次打包主要用的gulp插件),而下篇主要以一個demo項目為例,從本地checkout出合適的git版本,壓縮、合并、到最后打成zip包,發送至指定目錄,做一個全面的演示。
流程預覽:
首先,有一個類似于這樣的項目結構
圖中主要演示項目中大概會有的幾種文件類型,fonts(ttf,svg),image(jpg,png),js,less(sass),實際項目會復雜得多,開始一個項目的時候,可以直接從git上拿一個angular-seed(webpack-seed)改。
開始玩gulp之前,要確定自己有nodejs的環境,沒有的話,先去弄個nodejs,這個比較簡單,直接在https://nodejs.org/en/,下載一個對應開發環境的nodejs,然后一路next,路徑默認就好,window下自定義了路徑后,就不是全局的了,需要自己再配環境變量,圖省事的話,就一路next到finish。
ok,安裝好nodejs之后,在項目的src目錄下(與index.html的同級目錄)建立一個package.json文件與gulpfile.js(這個名字要對,不然命令行識別不了,項目中有時建立兩個gulp的js文件,如果兩個都含有同一任務,不特殊說明的話,命令行只執行文件名為gulpfile.js的任務),在命令行輸入
npm install gulp --save-dev(之前沒有安裝過gulp的話,執行npm install gulp -g --save-dev)指令,
"--save-dev"表示在安裝gulp之后,將安裝的信息保存在package.json文件,以便之后利用package.json文件去install相關插件(多人開發尤其要注意保存安裝信息),創建gulp成功后,目錄結構變為
之后所有的gulp插件都以此方式安裝,即npm install xx --save-dev
按照實際的打包順序, 我依次會介紹gulp-git、gulp-htmlmin、gulp-uglify、gulp-concat、gulp-ng-annotate(如果不是angular框架不需要)、gulp-less、gulp-minify-css、minimist、del、gulp-zip、gulp-ftp、run-sequence
gulp-gitgulp-git主要的作用是通過gulp腳本,來執行一些git的操作,gulp-git插件基本上可以完成所有常用的git操作,比如add、commit、push等等,還可以查看git-log,十分方便,用法也非常簡單,比如下面是一段獲取git倉庫中tag為v1.0.0的代碼(也可以checkout分支名):
var git = require("gulp-git"); gulp.task("checkout", function () { git.checkout("v1.0.0", function (err) { if (err) throw err; }); })
詳細的gulp-git使用方法,請參照https://github.com/stevelacy/...。
gulp-htmlmin就是一個壓縮html的插件,沒什么特別要講的,這邊也直接拿網上的一個常用配置來演示。
var htmlmin = require("gulp-htmlmin"); gulp.task("testHtmlmin", function () { var options = { removeComments: true,//清除HTML注釋 collapseWhitespace: true,//壓縮HTML collapseBooleanAttributes: true,//省略布爾屬性的值 ==> removeEmptyAttributes: true,//刪除所有空格作屬性值 ==> removeScriptTypeAttributes: true,//刪除
指明lm-library的路徑。
比較方便的做法就是直接把lm-library一起都算進壓縮編譯的路徑當中,給import的less文件添加reference的屬性,這樣就不會對lm-library.less進行編譯了,也不會影響正常的less。
具體屬性參考:https://github.com/nfroidure/...。 minimist這個插件,簡單來說就是從命令行當中提取參數。
開發中經常會遇到的應用場景是提供不同的參數,即動態參數,對應到gulp中,如果我們需要在命令行中手動輸入某個參數,此時就可以用minimist把他從命令行“提取”出來。
從minimist官方的文檔來看,exp為這樣:$ node example/parse.js -a beep -b boop { _: [], a: "beep", b: "boop" }文檔解釋也是一個‘-’為key,之后為value。但個人實際操作為兩個‘-’為key。可能原因是,我下的插件不是看的文檔的這個庫,或者英文太差看錯了。。。。。具體用的時候要自己注意了。
具體代碼為:var argv = require("minimist")(process.argv.slice(2)); gulp.task("checkout", function () { var gitTag = argv.tag; git.checkout(gitTag, function (err) { if (err) throw err; }); })cmd中輸入
gulp checkout --tag v1.0.0此時,gitTag就會被賦值為v1.0.0。
gulp-del
參考文檔為:https://github.com/substack/m...。刪除目標目錄,目標文件,演示var del=require("gulp-del")
gulp-zip
gulp.task("clean",function(){
return del(config.dist.basePath);
})易理解,就不詳細介紹了。將src中的各種文件,打成一個zip包,演示代碼:
var zip = require("gulp-zip"); gulp.task("zip", () { gulp.src("src/*") .pipe(zip("zipName.zip")) .pipe(gulp.dest("dist")); });gulp-ftp將目標文件,發送至FTP服務器,這邊有5個參數是必填的,分別為:
host:服務器地址(必須)
port:服務器端口(必須)
user:ftp賬戶(必須) // 如果FTP沒有訪問限制,可以不填
pass:ftp賬戶密碼(必須)// 如果FTP沒有訪問限制,可以不填
remote: 對應的服務器文件地址(必須)
logger:輸出文件列表名稱,默認在項目根目錄生成文件(可選,默認:logger.txt)
froot: 提單文件前綴(可選,默認:/usr/local/imgcache/htdocs)
exp:體驗環境地址(可選,默認null)
pro:正式環境地址(可選,默認null)
參考地址:https://github.com/sindresorh...。
演示代碼:
gulp.task("ftp", function () {return gulp.src("dist_zip/*") .pipe(ftp({ host: "testHost", port: 21, //user: "anonymous", //pass:null, remotePath: "path/" })); });run-sequence一個串行方式跑gulp任務的插件,在實際場景中,不允許我們同時跑很多任務,因為任務之間往往是相互依賴的,此時run-sequence就是一個很好的選擇,他可以讓多個任務按照寫入順序執行,同時可以控制哪些任務并行跑,哪些按照順序跑。
參考代碼:var runSequence = require("run-sequence"); gulp.task("publish", function (callback) { runSequence("clean",["html", "js","less", "copy"],"zip_new",callback); });比如上述代碼,執行順序為1、"clean"。2、["html", "js","less", "copy"]。3、"zip_new"。
當然也可以在gulp中使用依賴注入的方法。
比如:gulp.task("two", ["one"], function() { //任務two,會在任務one結束之后執行 });但個人還是更喜歡,用run-sequence因為一旦依賴項變多之后,普通的注入,相互之間依賴過后,可讀性就會變差,而sequence會讓代碼看起來更優雅,寫起來也更簡單。
上篇小結本文上篇主要講了gulp的安裝,以及常用的插件的介紹,gulp插件超級多。。本文介紹的這些,主要是下篇實際用到的,下篇會使用上述介紹的所有插件,來進行一次較完整的打包,ok,上篇作為鋪墊就到這里。
這里是下篇傳送門。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88019.html
摘要:到這里,已經可以取出我們要打包的項目代碼了,下面開始進行具體打包工作。這里用到的插件,代碼如下完整打包經過以上,一個完整的如下流程圖 打包流程簡介 本次打包大致過程是checkout出想要打包的git版本(可以是tag,也可以是branchName),然后依次讀取項目中的html、less、js進行壓縮合并等操作,復制項目中所用到的第三方庫到輸出目錄(即plugins中的插件,比如lo...
摘要:前端的發展真的是快,前幾年還是刀耕火種的開個編輯器,幾行和代碼就能上瀏覽器跑了。是啥官方的解釋是基于流的自動化構建工具。把運動的半成品看成是數據,那么流動的數據就是流。分工明確才能提高效率,這是社會發展的經驗總結。 前端的發展真的是快,前幾年還是刀耕火種的開個編輯器,幾行html和js代碼就能上瀏覽器跑了。現在呢?各種包,各種庫,各種框架,各種編程范式。究其原因,就是我們高中社會課本中...
摘要:概述最近研究了下工作流,先說一下我司的情況,我司現在是端用直出,用構建,部分就不進行描述了,因為網上的構建方法都是很成熟的了。 概述 最近研究了下工作流,先說一下我司的情況,我司現在是pc端用php直出,h5用vuejs構建,vuejs部分就不進行描述了,因為網上的構建方法都是很成熟的了。以下是php直出,需要向后臺同學提供html文件的構建方法。調試都是在本地調試的,調試完成后打包生...
摘要:前言與是目前圈子內比較活躍的前端構建工具。對于初學者來說,對這二者往往容易認識不清,今天,就從事件的源頭,說清楚與。它可以將許多松散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。打包后形成的文件出口。 前言:Webpack 與 gulp是目前圈子內比較活躍的前端構建工具。網上有很多二者比較的文章,面試中也會經常遇到gulp,Webpack的區別這樣的問題。對于初學者來說,對這二...
摘要:我覺得這方面的原因是當時對和的依賴,導致大家對的興趣不弄,錯過了最佳時機,這個其實跟百度自己的的技術棧有很大關系。這個阮一峰對于前端構建的變化吐槽過,說新的構建工具就是的構建工具。 文章來源 最近幾年,前端發展越來越迅速,各種萌新加入了前端這個大家庭,大有趕IOS、超Android的趨勢呀!同時,萌新們提出了各種前端工作問題,除了最基礎的html、css、js三板斧之外,最讓人頭疼的應...
閱讀 1041·2019-08-30 12:57
閱讀 2114·2019-08-30 11:11
閱讀 2177·2019-08-29 15:20
閱讀 1870·2019-08-29 14:12
閱讀 3274·2019-08-28 17:51
閱讀 2378·2019-08-26 13:23
閱讀 789·2019-08-26 10:34
閱讀 3844·2019-08-23 12:37