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