成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

淺析git

explorer_ddf / 3487人閱讀

摘要:淺析筆者在此整理了常見的命令,的重要性無需多言,與其再百度海中搜索命令,不妨嘗試收藏筆者的此篇作品。旨在快速高效地處理無論規(guī)模大小的任何軟件工程。其最大特色就是分支及合并操作非??焖俸啽恪?/p>

淺析git
筆者在此整理了常見的git命令,git的重要性無需多言,與其再百度海中搜索git命令,不妨嘗試收藏筆者的此篇作品。希望對你的學(xué)習(xí)有所幫助。

版本控制系統(tǒng)之git

Git:

(一)簡介:
Git 是一款免費的、開源的、分布式的版本控制系統(tǒng)。旨在快速高效地處理無論規(guī)模大小的任何軟件工程。
每一個 Git克隆 都是一個完整的文件庫,含有全部歷史記錄和修訂追蹤能力,不依賴于網(wǎng)絡(luò)連接或中心服務(wù)器。其最大特色就是“分支”及“合并”操作非??焖?、簡便。

(二)Git與svn的主要區(qū)別:
Git是分布式SCM,而SVN是基于服務(wù)器的,也就是說每個開發(fā)者本地都有一套git庫,每個人維護(hù)自己的版本(或者合并其他人的版本),而SVN是每個人寫完代碼后都及時的checkin到服務(wù)器上,進(jìn)行合并。

Git的優(yōu)勢:

說到優(yōu)勢,那么自然是相對與SVN而言的
1.版本庫本地化,支持離線提交,相對獨立不影響協(xié)同開發(fā)。每個開發(fā)者都擁有自己的版本控制庫,在自己的版本庫上可以任意的執(zhí)行提交代碼、創(chuàng)建分支等行為。例如,開發(fā)者認(rèn)為自己提交的代碼有問題?沒關(guān)系,因為版本庫是自己的,回滾歷史、反復(fù)提交、歸并分支并不會影響到其他開發(fā)者。

2.更少的“倉庫污染”。git對于每個工程只會產(chǎn)生一個.git目錄,這個工程所有的版本控制信息都在這個目錄中,不會像SVN那樣在每個目錄下都產(chǎn)生.svn目錄。

3.把內(nèi)容按元數(shù)據(jù)方式存儲,完整克隆版本庫。所有版本信息位于.git目錄中,它是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標(biāo)簽、分支、版本記錄等。

4.支持快速切換分支方便合并,比較合并性能好。在同一目錄下即可切換不同的分支,方便合并,且合并文件速度比SVN快。

5.分布式版本庫,無單點故障,內(nèi)容完整性好。內(nèi)容存儲使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時降低對版本庫的破壞。

本地創(chuàng)建git遠(yuǎn)程倉庫:

我這里使用的是:centos7.2、并且在服務(wù)器中已經(jīng)創(chuàng)建git賬戶;如果沒有創(chuàng)建git賬戶的朋友,需要先創(chuàng)建git,并且在服務(wù)器端安裝git

1.在本地建立一個空白的git倉庫:
Git –bare init
注:--bare參數(shù)相當(dāng)與只創(chuàng)建一個空白的倉庫,只包含記錄版本庫歷史記錄的.git目錄下面的文件,不會包含實際項目源文件的拷貝;

2.將本地創(chuàng)建的倉庫添加到遠(yuǎn)程服務(wù)器,使用的linux上傳命令;
Scp –r 文件夾 linux用戶名@ip:/文件目錄
如:scp –r gittest.git [email protected]:/data./git
(這里是將本地的gittest.git文件夾拷貝到服務(wù)器中 /data/git文件夾下)

3.此時可以直接將本地的gittest文件夾關(guān)聯(lián)遠(yuǎn)程倉庫,也可以在本地再次克隆git倉庫;使用命令如下:
Git clone [email protected]:/data/git/gittest.git

4.可以直接創(chuàng)建一個文件,進(jìn)行上傳測試;如:
cd gittest 進(jìn)入文件夾
vi app.js 然后隨便輸入字符,esc+wq!進(jìn)行保存退出;
然后將操作添加至?xí)捍鎱^(qū):
Git add .
創(chuàng)建本地倉庫的版本:
Git commit –m “haha”
提交至遠(yuǎn)程服務(wù)器倉庫:
Git push origin master;
注:如果此時出現(xiàn)此種錯誤:
remote: error: insufficient permission for adding an object to repository database ./objects
這時注意自己的服務(wù)器git賬戶是否有寫的權(quán)限;一般是因為git賬戶對gittest.git文件夾權(quán)限不夠;此時登陸自己的服務(wù)器,給git賬戶進(jìn)行權(quán)限的賦予;命令為:
Chown –R git:git /data/git/gittest.git
權(quán)限操作完畢后,再次進(jìn)行本地倉庫與遠(yuǎn)程倉庫的同步,一般此時不再會進(jìn)行報錯;
注:服務(wù)器git倉庫的創(chuàng)建也可以直接在linux操作系統(tǒng)中進(jìn)行;

本地git創(chuàng)建倉庫與github的遠(yuǎn)程倉庫相關(guān)聯(lián):

1.首先登陸github官網(wǎng);進(jìn)行注冊、登錄

2.創(chuàng)建新的倉庫

3.在本地創(chuàng)建git倉庫

mkdir githubtest
git init
vi app.js
注:https協(xié)議和ssh協(xié)議的區(qū)別就是每次遠(yuǎn)程操作都需要輸入github的用戶名和密碼;
4.https協(xié)議:
Git remote add origin https://github.com/misterguan...
Git add .
Git commit –m “haha”
Git push –u origin master
此時需要輸入github的用戶名和密碼

此時會報錯: error: failed to push some refs to
(此種原因一般為在github的遠(yuǎn)程倉庫有文件,在本地倉庫沒有,所以此時應(yīng)該先將遠(yuǎn)程倉庫合并到本地倉庫,再進(jìn)行提交)
git pull --rebase origin master
注意:這里的rebase和merge的區(qū)別,簡單理解,rebase在log中無分叉,而merge有
再次提交,將會成功;

ssh協(xié)議:

首先需要創(chuàng)建密鑰
ssh-keygen –t rsa –C [email protected]
可以一路回車;
(Enter file in which to save the key (/c/Users/dream/.ssh/id_rsa):
這里默認(rèn)就可以,這是存放ssh密鑰的路徑)

(Enter passphrase (empty for no passphrase):這里為ssh的密碼,可以為空)

然后到C:Users用戶 .ssh中找到id_rsa.pub,然后復(fù)制里面的密鑰到github
例:C:Usersdream.ssh
在github的ssh and gpg keys中new ssh key
Title為此ssh的標(biāo)記
Key為你本地的密鑰
測試下:
ssh [email protected]
如果輸出You"ve successfully authenticated;說明鏈接成功;
下面的操作跟https的一樣:

Git的分支管理:

查看本地分支:$ git branch
查看遠(yuǎn)程分支:$ git branch -r
創(chuàng)建本地分支:$ git branch [name] ----注意新分支創(chuàng)建后不會自動切換為當(dāng)前分支
切換分支:$ git checkout [name]
創(chuàng)建新分支并立即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經(jīng)參與了合并的分支,對于未有合并的分支是無法刪除的。如果想強制刪除一個分支,可以使用-D選項
合并分支:$ git merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并
創(chuàng)建遠(yuǎn)程分支(本地分支push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程分支:$ git push origin :heads/[name]?或?$ gitpush origin :[name]?

項目開發(fā)的分支:
Master:用于發(fā)布版本的分支;(用于大版本號更新時使用)
Dev:開發(fā)時的主分支;
Feature:功能分支;(開發(fā)某個局部分支,從dev分支上分出來的)
Release:創(chuàng)建一個預(yù)發(fā)布分支(從dev分支上分出來,合并到master分支上,進(jìn)行tag標(biāo)注)
Bug:bug分支(從master分支上分出來,修改完畢后合并到master和dev分支)

分支合并
在git進(jìn)行分支的合并時
如果使用默認(rèn)的fast-farward merge
直接修改當(dāng)前HEAD指針的指向然后再修改當(dāng)前HEAD指針,說白了就是修改兩個指針的指向,而并沒有生成新的commit對象。

如果使用—no-ff 進(jìn)行合并
這樣會在master分支上創(chuàng)建一個版本;

git如何解決代碼沖突:

1.邏輯沖突
git自動處理(合并/應(yīng)用補丁)成功,但是邏輯上是有問題的。
比如另外一個人修改了文件名,但我還使用老的文件名,這種情況下自動處理是能成功的,但實際上是有問題的。
又比如,函數(shù)返回值含義變化,但我還使用老的含義,這種情況自動處理成功,但可能隱藏著重大BUG。這種問題,主要通過自動化測試來保障。所以最好是能夠?qū)懗霰容^完備的自動化測試用例。
這種沖突的解決,就是做一次BUG修正。不是真正解決git報告的沖突。
2.內(nèi)容沖突
兩個用戶修改了同一個文件的同一塊區(qū)域,git會報告內(nèi)容沖突。我們常見的都是這種,后面的解決辦法也主要針對這種沖突。如圖中是:app.js沖突:

然后手動修改沖突的文件:

再次進(jìn)行文件的提交,版本的創(chuàng)建;
3.樹沖突
文件名修改造成的沖突,稱為樹沖突。
比如,a用戶把app.js改名為master.js,b用戶把app.js文件改名為test.js,那么b將這兩個commit合并時,會產(chǎn)生沖突。

此時打開文件,把需要的刪除的文件刪除掉即可,如把master.js刪除掉;

然后,再次重新創(chuàng)建版本即可:

git常用操作命令:

1.查看、添加、提交、刪除、找回,重置修改文件
git help # 顯示command的help
git show # 顯示某次提交的內(nèi)容 git show $id
git co -- # 拋棄工作區(qū)修改
git co . # 拋棄工作區(qū)修改
git add # 將工作文件修改提交到本地暫存區(qū)
git add . # 將所有修改過的工作文件提交暫存區(qū)
git rm # 從版本庫中刪除文件
git rm --cached # 從版本庫中刪除文件,但不刪除文件
git reset # 從暫存區(qū)恢復(fù)到工作文件
git reset -- . # 從暫存區(qū)恢復(fù)到工作文件
git reset --hard # 恢復(fù)最近一次提交過的狀態(tài),即放棄上次提交后的所有本次修改
git ci git ci . git ci -a # 將git add, git rm和git ci等操作都合并在一起做                                    git ci -am "some comments"
git ci --amend # 修改最后一次提交記錄
git revert <$id> # 恢復(fù)某次提交的狀態(tài),恢復(fù)動作本身也創(chuàng)建次提交對象
git revert HEAD # 恢復(fù)最后一次提交的狀態(tài)
2.查看文件diff
git diff # 比較當(dāng)前文件和暫存區(qū)文件差異 git diff
git diff # 比較兩次提交之間的差異
git diff .. # 在兩個分支之間比較
git diff --staged # 比較暫存區(qū)和版本庫差異
git diff --cached # 比較暫存區(qū)和版本庫差異
git diff --stat # 僅僅比較統(tǒng)計信息
3.查看提交記錄
git log git log # 查看該文件每次提交記錄
git log -p # 查看每次詳細(xì)修改內(nèi)容的diff
git log -p -2 # 查看最近兩次詳細(xì)修改內(nèi)容的diff
git log --stat #查看提交統(tǒng)計信息
tig
Mac上可以使用tig代替diff和log,brew install tig

4.查看、切換、創(chuàng)建和刪除分支
git br -r # 查看遠(yuǎn)程分支
git br # 創(chuàng)建新的分支
git br -v # 查看各個分支最后提交信息
git br --merged # 查看已經(jīng)被合并到當(dāng)前分支的分支
git br --no-merged # 查看尚未被合并到當(dāng)前分支的分支
git co # 切換到某個分支
git co -b # 創(chuàng)建新的分支,并且切換過去
git co -b # 基于branch創(chuàng)建新的new_branch
git co $id # 把某次歷史提交記錄checkout出來,但無分支信息,切換到其他分支會自動刪除
git co $id -b # 把某次歷史提交記錄checkout出來,創(chuàng)建成一個分支
git br -d # 刪除某個分支
git br -D # 強制刪除某個分支 (未被合并的分支被刪除的時候需要強制)
5.?分支合并和rebase
git merge # 將branch分支合并到當(dāng)前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,這樣可以生成merge提交
git rebase master # 將master rebase到branch,相當(dāng)于: git co && git rebase master && git co master && git merge
6.?Git補丁管理(方便在多臺機器上開發(fā)同步時用)
git diff > ../sync.patch # 生成補丁
git apply ../sync.patch # 打補丁
git apply --check ../sync.patch #測試補丁能否成功
7.?Git暫存管理
git stash # 暫存
git stash list # 列所有stash
git stash apply # 恢復(fù)暫存的內(nèi)容
git stash drop # 刪除暫存區(qū)
8.Git遠(yuǎn)程分支管理
git pull # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地
git pull --no-ff # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地,不要快進(jìn)合并
git fetch origin # 抓取遠(yuǎn)程倉庫更新
git merge origin/master # 將遠(yuǎn)程主分支合并到本地當(dāng)前分支
git co --track origin/branch # 跟蹤某個遠(yuǎn)程分支創(chuàng)建相應(yīng)的本地分支
git co -b origin/ # 基于遠(yuǎn)程分支創(chuàng)建本地分支,功能同上
git push # push所有分支
git push origin master # 將本地主分支推到遠(yuǎn)程主分支
git push -u origin master # 將本地主分支推到遠(yuǎn)程(如無遠(yuǎn)程主分支則創(chuàng)建,用于初始化遠(yuǎn)程倉庫)
git push origin # 創(chuàng)建遠(yuǎn)程分支, origin是遠(yuǎn)程倉庫名
git push origin : # 創(chuàng)建遠(yuǎn)程分支
git push origin : #先刪除本地分支(git br -d ),然后再push刪除遠(yuǎn)程分支
9.Git遠(yuǎn)程倉庫管理
GitHub
git remote -v # 查看遠(yuǎn)程服務(wù)器地址和倉庫名稱
git remote show origin # 查看遠(yuǎn)程服務(wù)器倉庫狀態(tài)
git remote add origin git@ github:robbin/robbin_site.git # 添加遠(yuǎn)程倉庫地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 設(shè)置遠(yuǎn)程倉庫地址(用于修改遠(yuǎn)程倉庫地址) git remote rm # 刪除遠(yuǎn)程倉庫
10.創(chuàng)建遠(yuǎn)程倉庫
git clone --bare robbin_site robbin_site.git # 用帶版本的項目創(chuàng)建純版本倉庫
scp -r my_project.git git@ git.csdn.net:~ # 將純倉庫上傳到服務(wù)器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服務(wù)器創(chuàng)建純倉庫
git remote add origin git@ github.com:robbin/robbin_site.git # 設(shè)置遠(yuǎn)程倉庫地址
git push -u origin master # 客戶端首次提交
git push -u origin develop # 首次將本地develop分支提交到遠(yuǎn)程develop分支,并且track
git remote set-head origin master # 設(shè)置遠(yuǎn)程倉庫的HEAD指向master分支
也可以命令設(shè)置跟蹤遠(yuǎn)程庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop

項目自動化:

現(xiàn)在的前端開發(fā)已經(jīng)不再僅僅只是靜態(tài)網(wǎng)頁的開發(fā)了,日新月異的前端技術(shù)已經(jīng)讓前端代碼的邏輯和交互效果越來越復(fù)雜,更加的不易于管理,模塊化開發(fā)和預(yù)處理框架把項目分成若干個小模塊,增加了最后發(fā)布的困難,沒有一個統(tǒng)一的標(biāo)準(zhǔn),讓前端的項目結(jié)構(gòu)千奇百怪。前端自動化構(gòu)建在整個項目開發(fā)中越來越重要。

(一)工具化
在前端的技術(shù)棧發(fā)展過程中,出現(xiàn)了很多的工具,形成了工具化,能夠用工具完成的絕不要手工完成,來幫助開發(fā)者提升效率。

前端工作流工具: Gulp,Grunt

前端js模塊編譯工具:Babel,Browserify,Webpack

包管理器: npm,bower

前端開發(fā)系列工具: livereload,數(shù)據(jù)mock,代碼監(jiān)控,代碼檢查。

(二)工程化
工程化是一個發(fā)展趨勢,以工具化為基礎(chǔ)。

工程的核心是流程自動化,又稱為構(gòu)建,這些包括了:代碼質(zhì)量檢測,代碼壓縮,代碼合并,代碼優(yōu)化,代碼編譯,單元測試等等部分。構(gòu)建就是把這些以工作流程的方式組合起來,然后用一個命令行運行這整個流程。它有點像批處理,但是是程序開發(fā)中使用的特殊批處理。

(三)自動化
自動化是以工程化為基礎(chǔ),是在流程自動化上更進(jìn)一步的自動化。
持續(xù)集成就是全自動化的一個終極體現(xiàn)。他的主要流程是:版本控制庫 ->構(gòu)建 ->測試 ->報告.

(四)代碼規(guī)范
代碼規(guī)范可以提高代碼的可閱讀性和避免一些低級錯誤。為了將代碼規(guī)范的檢查放到前端開發(fā)工程中,各種前端語言都有對應(yīng)的hint或者lint工具。

(五)預(yù)處理
SASS
甚至為了避免這一點,引入了各種預(yù)編譯語言,css的預(yù)編譯less,現(xiàn)在流行的是sass,功能也更加強大,語法錯誤無法通過編譯,來彌補css這種缺陷。

(六)ES6
js的預(yù)處理語言也有很多,只是為了讓有其他語言經(jīng)驗的開發(fā)者更容易的上手js的編碼。

因為瀏覽器的實現(xiàn)大多還是 ES5 的標(biāo)準(zhǔn),為了使用最新的 ES6 語法,通常的做法是采用 Babel 將 ES6 編譯為 ES5。

(七)js模塊化
amd,cmd,common,es6

(八)文件處理
通常一個前端項目會分有一個 src 目錄和 dist 目錄, src 放置源碼,dist 放置編譯后的代碼。所以在前端工程的流程中會涉及到文件的拷貝,刪除,移動等流程。

(九)開發(fā)效率
通常的前端開發(fā)過程是,修改前端代碼,調(diào)用命令編譯代碼,然后瀏覽器 F5 刷新。這個過程可以做到自動化,通過代碼監(jiān)控工具,指定要監(jiān)控的目錄和文件,如果對應(yīng)文件有改變,調(diào)用編譯工具編譯源碼,然后通過 livereload 自動刷新瀏覽器。 gulp-browserify也可以實現(xiàn)同樣的功能。

(十)數(shù)據(jù)的mock
現(xiàn)代化前端項目開發(fā)大多是前后端分離的方式,也就是后端基本是提供 API 服務(wù),在真實開發(fā)環(huán)境中,通常的問題是,后端 API 極其不穩(wěn)定或者沒開發(fā),為了不阻礙前端的開發(fā),通常的做法是,前后端先約定 API 接口定義,然后前端根據(jù)定義 mock 接口。

(十一)前端工作流
為了解決前端工程中復(fù)雜的流程,出現(xiàn)了很多開源前端流程處理工具。這些工作流工具不僅僅是其本身,都是一個流程生態(tài)體系,每個工具都涉及到對應(yīng)的插件庫,幾乎我們能想到的前端工程問題都有對用的插件能夠解決。

Gulp:

Gulp 是基于node.js的一個前端自動化構(gòu)建工具,開發(fā)這可以使用它構(gòu)建自動化工作流程(前端集成開發(fā)環(huán)境)。?
使用gulp你可以簡化工作量,讓你把重點放在功能的開發(fā)上,從而提高你的開發(fā)效率和工作質(zhì)量。?gulpjs是一個前端構(gòu)建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學(xué)習(xí)起來很容易,而且gulpjs使用的是nodejs中stream來讀取和操作數(shù)據(jù),其速度更快

(一)安裝:
需要在全局或者項目中同時安裝;
Cnpm install -g gulp
Cnpm install –save-dev gulp

(二)配置文件

使用gulpfile.js進(jìn)行配置,基于gulp工作流的項目結(jié)構(gòu)如下:

(三)Api:

1.gulp.src(globs[, options]) 輸出(Emits)符合所提供的匹配模式(glob)或者匹配模式的數(shù)組(array of globs)的文件。 將返回一個?Vinyl files?的?stream?它可以被?piped?到別的插件中。文件的入口
A.路徑匹配:
1)*? :能匹配?a.js,x.y,abc,abc/,但不能匹配a/b.js
2).? :能匹配?a.js,style.css,a.b,x.y
3)//*.js? :能匹配?a/b/c.js,x/y/z.js,不能匹配a/b.js,a/b/c/d.js
4)**?能匹配 :?abc,a/b.js,a/b/c.js,x/y/z,x/y/z/a.b,能用來匹配所有的目錄和文件
5)*/.js? :能匹配?foo.js,a/foo.js,a/b/foo.js,a/b/c/foo.js
6)a/**/z? :能匹配?a/z,a/b/z,a/b/c/z,a/d/g/h/j/k/z
7)a/b/z? :能匹配?a/b/z,a/sb/z,但不能匹配a/x/sb/z,因為只有單多帶帶出現(xiàn)才能匹配多級目錄
8)?.js? :能匹配?a.js,b.js,c.js
9)a??? :能匹配?a.b,abc,但不能匹配ab/,因為它不會匹配路徑分隔符
10)[xyz].js? :只能匹配?x.js,y.js,z.js,不會匹配xy.js,xyz.js等,整個中括號只代表一個字符
11)1.js? :能匹配?a.js,b.js,c.js等,不能匹配x.js,y.js,z.js

B.匹配多種文件
//使用數(shù)組的方式來匹配多種文件
gulp.src(["js/.js","css/.css","*.html"])

2.gulp.dest(path[, options]) 能被 pipe 進(jìn)來,并且將會寫文件。并且重新輸出(emits)所有數(shù)據(jù),因此你可以將它 pipe 到多個文件夾。如果某文件夾不存在,將會自動創(chuàng)建它。輸出文件
根路徑:如果在src中不設(shè)置base時,所有的默認(rèn)根路徑,都是從出現(xiàn)匹配符的地方開始截?。?br>如:
gulp.src("app/src/*/.css") //此時base的值為app/src,也就是說它的base路徑為app/src

 //設(shè)該模式匹配到了文件 app/src/css/normal.css
.pipe(gulp.dest("dist")) //用dist替換掉base路徑,最終得到 dist/css/normal.css

如果增加base基路徑:

gulp.src(script/lib/*.js, {base:"script"}) //配置了base參數(shù),此時base路徑為script //假設(shè)匹配到的文件為script/lib/jquery.js .pipe(gulp.dest("build")) //此時生成的文件路徑為 build/lib/jquery.js
3.gulp.task(name[, deps], fn) 定義一個使用?Orchestrator?實現(xiàn)的任務(wù)(task)。

1)參數(shù):
Name:任務(wù)的名字,如果你需要在命令行中運行你的某些任務(wù),那么,請不要在名字中使用空格。
Deps:類型:?Array,一個包含任務(wù)列表的數(shù)組,這些任務(wù)會在你當(dāng)前任務(wù)運行之前完成。
Fn:該函數(shù)定義任務(wù)所要執(zhí)行的一些操作。

2)異步任務(wù)
A.使用callback:

var gulp = require("gulp");
// 返回一個 callback,因此系統(tǒng)可以知道它什么時候完成
gulp.task("one", function(cb) {

// 做一些事 -- 異步的或者其他的
cb(err); // 如果 err 不是 null 或 undefined,則會停止執(zhí)行,且注意,這樣代表執(zhí)行失敗了

});
// 定義一個所依賴的 task 必須在這個 task 執(zhí)行之前完成
gulp.task("two", ["one"], function() {

// "one" 完成后

});

gulp.task("default", ["two"]);

B.使用promise

var gulp = require("gulp");
// 返回一個 callback,因此系統(tǒng)可以知道它什么時候完成
gulp.task("one", function(cb) {

// 做一些事 -- 異步的或者其他的
return new Promise((res, rej) => {
    setTimeout(() => {
        res(1344)
    }, 5000)
})

});
// 定義一個所依賴的 task 必須在這個 task 執(zhí)行之前完成
gulp.task("two", ["one"], function() {

// "one" 完成后
console.log("two開始")

});

gulp.task("default", ["two"]);
注意:5s后才開始執(zhí)行的two任務(wù)

3)對于同步任務(wù):

  gulp.task("one",function(cb){
    var stream = gulp.src("client/**/*.js")
        .pipe(dosomething()) //dosomething()中有某些異步操作
        .pipe(gulp.dest("build"));
      return stream;
  });
  
  gulp.task("two",["one"],function(){
    console.log("two is done");
  });


4.gulp.watch(glob[, opts], tasks)監(jiān)視文件,并且可以在文件發(fā)生改動時做一些事情;
1)監(jiān)聽文件改變,并執(zhí)行相應(yīng)的task任務(wù)
var watcher = gulp.watch("js/*/.js", ["uglify", "reload"]);
watcher.on("change", function(event) {

console.log("File " + event.path + " was " + event.type + ", running tasks...");

});

2)監(jiān)聽文件改變,并執(zhí)行回調(diào)函數(shù)

gulp.watch("js/*/.js", function(event) {

console.log("File " + event.path + " was " + event.type + ", running tasks...");

});

(四)第三方插件:

1.gulp-load-plugins:用來加載插件,避免我們再頭部聲明一堆插件,做到想用就用
2.less:用于編譯 .less文件
3.autoprefixer:自動添加css前綴
4.babel:es6 編譯成 es5
5.uglify:JS壓縮
6.minify:CSS壓縮
7.rename:重命名
8.sourcemaps:資源映射
9.concat:合并文件
10.del:刪除文件、文件夾
11.inject:文件注入
12.notify:提示信息
13.browser-sync:熱啟動
14.http-proxy-middleware:配合browser-sync進(jìn)行跨域
15.changed:只有發(fā)生了改變的文件才能進(jìn)入流中
16.sequence:讓task按順序完成
17.rev:添加MD5
18.watch:監(jiān)聽文件變化

(五)實現(xiàn)項目自動化構(gòu)建:

使用gulp構(gòu)建項目,項目中支持:
1)js的模塊化(可以實現(xiàn)模塊化(common與require的切換));
2)sass的編譯;
3)jslint的代碼校驗;
4)劃分本地啟動配置和線上打包配置;
5)實現(xiàn)文件的md5加密;
6)實現(xiàn)本地的開發(fā)服務(wù);
7)實現(xiàn)mock數(shù)據(jù)
8)實現(xiàn)本地實時刷新

本篇文章內(nèi)容還未補全,之后會做更多修改,以期待完成補全,不過對于初學(xué)git以及node的同學(xué)來說已然是夠用了

  • xyz ?

  • 文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/53186.html

    相關(guān)文章

    • 淺析webpack源碼之Tapable粗解(五)

      摘要:打開是個構(gòu)造函數(shù),定義了一些靜態(tài)屬性和方法我們先看在插件下地址上面寫的解釋就跟沒寫一樣在文件下我們看到輸出的一些對象方法每一個對應(yīng)一個模塊而在下引入的下面,我們先研究引入的對象的英文單詞解釋,除了最常用的點擊手勢之外,還有一個意思是水龍頭進(jìn) 打開compile class Compiler extends Tapable { constructor(context) { ...

      Arno 評論0 收藏0
    • 淺析git

      摘要:淺析筆者在此整理了常見的命令,的重要性無需多言,與其再百度海中搜索命令,不妨嘗試收藏筆者的此篇作品。旨在快速高效地處理無論規(guī)模大小的任何軟件工程。其最大特色就是分支及合并操作非??焖俸啽?。 淺析git 筆者在此整理了常見的git命令,git的重要性無需多言,與其再百度海中搜索git命令,不妨嘗試收藏筆者的此篇作品。希望對你的學(xué)習(xí)有所幫助。 版本控制系統(tǒng)之git Git: (一)簡介:G...

      Neilyo 評論0 收藏0
    • 淺析git

      摘要:淺析筆者在此整理了常見的命令,的重要性無需多言,與其再百度海中搜索命令,不妨嘗試收藏筆者的此篇作品。旨在快速高效地處理無論規(guī)模大小的任何軟件工程。其最大特色就是分支及合并操作非??焖俸啽?。 淺析git 筆者在此整理了常見的git命令,git的重要性無需多言,與其再百度海中搜索git命令,不妨嘗試收藏筆者的此篇作品。希望對你的學(xué)習(xí)有所幫助。 版本控制系統(tǒng)之git Git: (一)簡介:G...

      Big_fat_cat 評論0 收藏0
    • python setup.py 淺析

      摘要:淺析參數(shù)說明對于所有列表里提到的純模塊做處理需要在腳本里有一個包名到目錄的映射。闡明包名到目錄的映射,見鍵代表了包的名字,空的包名則代表不在任何包中的頂層包。最終會在下生成可執(zhí)行文件,調(diào)用制定的函數(shù)實例分析 python setup.py 淺析 setuptools.setup() 參數(shù)說明 packages 對于所有 packages 列表里提到的純 Python 模塊做處理 需要...

      sevi_stuo 評論0 收藏0

    發(fā)表評論

    0條評論

    explorer_ddf

    |高級講師

    TA的文章

    閱讀更多
    最新活動
    閱讀需要支付1元查看
    <