那些年的開(kāi)源項(xiàng)目,你跑起來(lái)了嗎?
那些年,我的電腦還只是用來(lái)打 Dota 的游戲機(jī)。
那些年,我為了完成畢設(shè)到處找源碼。
那些年,我第一次知道書(shū)后的光盤(pán)中竟然藏有代碼。
就這樣我靠著這份代碼順利畢業(yè),和兄弟們互道一句:“分頭打錢(qián),有事兒TP!”,獨(dú)自踏上了程序員之路。
那是我第一次體驗(yàn)到源碼的威力,后來(lái)機(jī)緣巧合之下我闖入 GitHub 的世界。期間我創(chuàng)建的 HelloGitHub 共分享了 1900 多個(gè)開(kāi)源項(xiàng)目,連載 5 年收獲了 4.9w Star。
我也從最初找不到源碼憤然地叉掉 GitHub 網(wǎng)站,到后來(lái)如獲至寶般地收獲了各種開(kāi)源項(xiàng)目,跌跌撞撞地闖進(jìn)來(lái)了 GitHub 的大門(mén)?;叵肫鸬谝淮伟验_(kāi)源項(xiàng)目跑起來(lái)的場(chǎng)景,我眼中飽含淚水仰天長(zhǎng)嘯:“如果當(dāng)年會(huì)這手,就不會(huì)被畢設(shè)壓制得毫無(wú)還手之力!”
隨著開(kāi)源項(xiàng)目的不斷流行,對(duì)開(kāi)源感興趣的人也越來(lái)越多。大多數(shù)剛接觸 GitHub 的人都是為了尋找某個(gè)有趣的開(kāi)源項(xiàng)目、解決問(wèn)題的開(kāi)源項(xiàng)目或者是慕名而來(lái)(HelloGitHub),但當(dāng)你準(zhǔn)備上手體驗(yàn)開(kāi)源項(xiàng)目的時(shí)候,可能就會(huì)被不知道項(xiàng)目怎么下載、沒(méi)找到中文版、不會(huì)運(yùn)行、運(yùn)行報(bào)錯(cuò)等問(wèn)題卡住,這時(shí)你的雙手已經(jīng)摸到了 GitHub 大門(mén),但就是怎么使勁兒都拽不開(kāi)!
這些問(wèn)題我在剛接觸 GitHub 那些年都遇到過(guò),我懂那種無(wú)助和沮喪。所以就有了這篇文章,希望我的經(jīng)驗(yàn)和總結(jié)能夠?qū)δ阌兴鶐椭?,同時(shí)我還根據(jù)開(kāi)源項(xiàng)目運(yùn)行起來(lái)的難易程度,將文章分為:需要編程知識(shí) 和 不需要編程知識(shí) 兩個(gè)部分,最后還補(bǔ)充了一些如何快速看懂文檔、找到問(wèn)題答案的方法。
如果你不止一次嘗試運(yùn)行開(kāi)源項(xiàng)目,但都以失敗告終。那這次不管你會(huì)不會(huì)編程,只要讀完這篇文章就一定能踹開(kāi) GitHub 的大門(mén)!
一、我不會(huì)編程
“東西制造出來(lái)就是給人用的!” 只要掌握打開(kāi)它的方法,就會(huì)多一個(gè)順手的工具。
HelloGitHub 中有很多讓人想要上手試一試的開(kāi)源項(xiàng)目,而且大多數(shù)項(xiàng)目根本不需要任何額外的操作和知識(shí)下載就能用,想要上手它們只需要找到下載地址就可以了。這里我總結(jié)了幾個(gè)常見(jiàn)的下載入口:
- Releases:項(xiàng)目發(fā)布頁(yè)面
- 官網(wǎng):點(diǎn)進(jìn)去就會(huì)看到下載地址
- 應(yīng)用商店:拿著應(yīng)用名字去 谷歌商店(Android)、App Store(macOS)搜索
下面將舉例進(jìn)行詳細(xì)介紹,同時(shí)還會(huì)有如何在線體驗(yàn)、如何找到中文版等。
1.1 Releases
Releases 是 GitHub 項(xiàng)目的發(fā)布頁(yè)面,這里提供各種安裝包的下載鏈接以及最新版本。比如這個(gè)項(xiàng)目:
ShareX:免費(fèi)的 Windows 截屏錄制工具。功能強(qiáng)大支持全屏截圖、滾動(dòng)截圖、檢測(cè)窗口截圖、GIF 錄制等,截圖后還支持在圖片上增加文字、水印、特效、馬賽克等,最后可直接上傳圖床得到鏈接,絲滑地完成整個(gè)截圖流程。
Releases 頁(yè)面入口位置如下圖:
點(diǎn)擊進(jìn)入后就能看到安裝包和源碼壓縮包的下載地址,選擇想要下載的包即可。
最后列舉一下常見(jiàn)的安裝包文件后綴:.exe(Windows)、.dmg(macOS)、.tar.gz(源碼壓縮包、Linux)、.apk(Android)
1.2 官網(wǎng)
有些開(kāi)源項(xiàng)目并沒(méi)有把安裝包放到 Releases 頁(yè)面,這個(gè)時(shí)候就需要去官網(wǎng)下載。這里用 VSCode 舉例,一般情況下開(kāi)源項(xiàng)目的官網(wǎng)地址,都放在很顯眼的位置(項(xiàng)目首頁(yè)),比如 VSCode 就放到了 About 部分。
進(jìn)入官網(wǎng),下載地址就映入眼簾,還自動(dòng)匹配了系統(tǒng)。
關(guān)鍵字:Download、Releases
1.3 點(diǎn)開(kāi)就能玩
有些開(kāi)源項(xiàng)目貼心地提供了在線預(yù)覽和試玩的地址,點(diǎn)開(kāi)就能玩。比如:
react-tetris:用 React+Redux+Immutable 做的俄羅斯方塊,包含詳細(xì)的技術(shù)介紹。
在線體驗(yàn)的鏈接一般在:About、項(xiàng)目首頁(yè)和官網(wǎng)的 Demo、Online 字眼的鏈接
1.4有沒(méi)有中文
雖然 GitHub 上面的英文項(xiàng)目占了很大部分,但其中也有提供了中文描述、中文文檔、中文版本的開(kāi)源項(xiàng)目。如果你在 GitHub 看到一本很好的開(kāi)源書(shū)籍、教程、資料、文檔,想找找中文版本??梢試L試在項(xiàng)目首頁(yè)、官網(wǎng)尋找關(guān)鍵字:中文、Chinese、zh、cn,比如:
git-tips:常用 Git 命令集合。中文版本
總結(jié):不會(huì)編程也可以玩 GitHub 開(kāi)源項(xiàng)目的方法:
- 下載安裝包:Releases、官網(wǎng)
- 在線體驗(yàn):Demo、Online 點(diǎn)開(kāi)就能用
- 找中文的關(guān)鍵字:中文、Chinese、zh、cn
二、我會(huì)編程
“不重復(fù)造輪子” 靠譜的開(kāi)源項(xiàng)目,可以節(jié)約大量的開(kāi)發(fā)時(shí)間。近距離接觸大神們的代碼,耳濡目染你也會(huì)慢慢變強(qiáng)。這部分我將分為:庫(kù)、服務(wù)和項(xiàng)目,下面將逐一介紹它們的安裝、部署和運(yùn)行的方法。
2.1 庫(kù)
當(dāng)你找到一個(gè)解決問(wèn)題的庫(kù),不要著急 clone 項(xiàng)目。一般情況下開(kāi)源庫(kù)都提供了對(duì)應(yīng)編程語(yǔ)言的包管理器安裝命令,一條命令就能完成安裝。比如:
- Python:pip install rich
- Go:go get github.com/gorilla/websocket
- Ruby:gem install ruby-pinyin
- JavaScript:npm install echarts --save
- 等等
又或者前端 CSS 和 JS 對(duì)應(yīng)的 CDN 鏈接,直接拿來(lái)用即可。
normalize.css:用來(lái)消除瀏覽器默認(rèn)樣式的 CSS 庫(kù)。不同瀏覽器對(duì)于同一個(gè)元素會(huì)有不一樣的默認(rèn)樣式,比如:超鏈接線的顏色。相較于 reset(重制樣式)解決辦法,normalize.css 采用更加和平且高效的方式,解決了瀏覽器默認(rèn)樣式的問(wèn)題,盡可能讓同一個(gè) CSS 文件在不同的瀏覽器上顯示效果一樣。
關(guān)鍵字:pip、npm、CDN 等
2.2 服務(wù)
這里的“服務(wù)”特指數(shù)據(jù)庫(kù)、緩存、搜索等基礎(chǔ)服務(wù),這種基礎(chǔ)服務(wù)的開(kāi)源項(xiàng)目都會(huì)詳細(xì)地提供不同操作系統(tǒng)的安裝方式。比如:
meilisearch:Rust 寫(xiě)的輕量級(jí)開(kāi)源搜索引擎。
部署方式:
- macOS:brew update && brew install meilisearch
- Docker:docker run -p 7700:7700 -v "$(pwd)/data.ms:/data.ms" getmeili/meilisearch
- Linux:curl -L https://install.meilisearch.com | sh
關(guān)鍵字:install、brew、docker、curl、apt、yum 等
2.3 項(xiàng)目
其實(shí)項(xiàng)目(完整的應(yīng)用)大多是由庫(kù)、基礎(chǔ)服務(wù)組成,所以要把一個(gè)開(kāi)源項(xiàng)目跑起來(lái),就三板斧:
- 安裝依賴(lài)庫(kù)、服務(wù)
- 初始化配置
- 找到啟動(dòng)入口
這里拿一個(gè) Web 項(xiàng)目舉例:
wagtail:強(qiáng)大的開(kāi)源 Django CMS(內(nèi)容管理系統(tǒng))。專(zhuān)注于內(nèi)容管理,不束縛前端實(shí)現(xiàn)。有趣的 StreamField 技術(shù)讓你的內(nèi)容變得靈活且不失結(jié)構(gòu),竟然還支持 A/B 測(cè)試,Google 和 NASA 都在用它。
運(yùn)行步驟:
1. 安裝庫(kù):pip install wagtail2. 初始化項(xiàng)目:wagtail start mysite
3. 進(jìn)入目錄:cd mysite
4. 安裝依賴(lài):pip install -r requirements.txt
5. 初始化數(shù)據(jù)庫(kù):python manage.py migrate
6. 新建超級(jí)管理員:python manage.py createsuperuser
7. 啟動(dòng)項(xiàng)目:python manage.py runserver
關(guān)鍵字:start、run、main、init、begin、server
總結(jié):不同編程語(yǔ)言的項(xiàng)目,在部署、安裝、運(yùn)行各個(gè)步驟都有區(qū)別,但你只需牢記三板斧和關(guān)鍵字,就能項(xiàng)目中找到答案。如果沒(méi)找到,請(qǐng)看下一部分!
三、作者留下的答案
“你遇到的問(wèn)題,大多數(shù)情況下別人都遇到過(guò)?!?開(kāi)源項(xiàng)目的作者把項(xiàng)目開(kāi)源,第一個(gè)愿望就是有人用。所以,如果你在使用中遇到問(wèn)題,先去尋找下作者留下的解決辦法,然后找找有沒(méi)有遇到同樣問(wèn)題的人,沒(méi)有的話可以向作者提問(wèn)。實(shí)在不行,就去源碼中尋找答案!
3.1 文檔
項(xiàng)目首頁(yè)展示的都是關(guān)鍵信息,一般情況下只會(huì)給出文檔的鏈接和示例代碼的片段。
如果首頁(yè)的信息不夠用,就去文檔中尋找辦法:
- 完整瀏覽文檔的快速開(kāi)始部分,記下常用函數(shù)和功能(上手)
- 帶著問(wèn)題看文檔,善用文檔的搜索功能,搜問(wèn)題的關(guān)鍵字(遇到問(wèn)題)
關(guān)鍵字:document、doc、wiki、example、demo、usage
3.2 Issues
Issues 是 GitHub 項(xiàng)目的提問(wèn)頁(yè)面,作者會(huì)在這里回復(fù)大家的問(wèn)題。如果你遇到問(wèn)題,不要著急提問(wèn)先在 issues 搜一下,看看有沒(méi)有相同問(wèn)題已經(jīng)問(wèn)過(guò)了,沒(méi)準(zhǔn)就找到解決辦法了。
提問(wèn)時(shí)提供的信息越多:系統(tǒng)、環(huán)境、異常信息、做過(guò)的嘗試,得到的答復(fù)越準(zhǔn)確,解決的時(shí)間也最快,最后可以拿著問(wèn)題再去問(wèn)問(wèn)搜索引擎。
關(guān)鍵字:issues、error、fail、close
3.3 在源碼中找答案
源碼面前沒(méi)有秘密,同時(shí)作者也會(huì)在注釋中留下線索,助你找到問(wèn)題的答案。無(wú)需下載和安裝插件,僅需 2 步就能在線閱讀源碼:
- 把輸入法切換到英文
- 在項(xiàng)目首頁(yè)按下 .
總結(jié):尋找問(wèn)題最快的方式不是提問(wèn),而是找到“答案頁(yè)”。你遇到的每個(gè)問(wèn)題都是變強(qiáng)的墊腳石,對(duì)問(wèn)題多些耐心、多些嘗試、少些提問(wèn),久而久之你解決問(wèn)題的能力就會(huì)有質(zhì)的飛躍,運(yùn)行起開(kāi)源項(xiàng)目也會(huì)更加得心應(yīng)手。
最后
以上就是我總結(jié)的《如何把 GitHub 項(xiàng)目跑起來(lái)》的所有方法,希望對(duì)你有所幫助。那些年我踩過(guò)的坑,希望你通過(guò)本文可以輕松躍過(guò)。
找找那些年不會(huì)玩、運(yùn)行不起來(lái)的開(kāi)源項(xiàng)目,實(shí)驗(yàn)下本文介紹的方法好不好用。
最后,感謝大家的閱讀,您的每一個(gè)點(diǎn)贊和回復(fù)都是我創(chuàng)作最大的動(dòng)力!