摘要:前言記錄下開發(fā)的一些事,加強(qiáng)自己對的應(yīng)用。雛形參考于的項(xiàng)目管理,發(fā)現(xiàn)非常的優(yōu)雅。嘗試通過修改權(quán)限為,最后無果不了了之。方式二詢問篩選會(huì)在終端監(jiān)聽輸入的關(guān)鍵字,根據(jù)關(guān)鍵字篩選出一系列的倉庫。自己也在使用,打算長期維護(hù)。
前言
記錄下開發(fā)的一些事,加強(qiáng)自己對nodejs的應(yīng)用。共勉!
有讓你操蛋的事,就有需求對于經(jīng)常參與開源貢獻(xiàn),或者看見某些庫,像試試手的人來說,經(jīng)常需要git clone https://xxxx
操蛋的是,程序員是懶的,一般不會(huì)手動(dòng)去刪除某個(gè)項(xiàng)目,導(dǎo)致于克隆的項(xiàng)目會(huì)越來越多。
對于這些項(xiàng)目的管理,則會(huì)變得越來越困難,放眼放去,全是文件夾。
所以,需求就誕生了。
雛形參考于GO的項(xiàng)目管理,發(fā)現(xiàn)非常的優(yōu)雅。
GO的項(xiàng)目類似的結(jié)構(gòu)是這樣的
https://{source}/{owner}/{name} - source - owner - name - name - owner - name - name - name - source - owner - name - name
所以就想著寫一個(gè)功能與之類似的。
這樣基本就確定了一個(gè)項(xiàng)目目錄的唯一性。
簡單無腦,我只管克隆,卻不用管克隆的項(xiàng)目在哪個(gè)文件夾,想刪就刪。
于是,雛形git-clone-cli就誕生了
這只是一個(gè)簡單的,代替git clone xxx的工具
開發(fā)隨著需求越來越多,已經(jīng)不能滿足簡單的git clone了,所以gpm來了
相對與git clone, 豐富了一些東西,更另我們方便管理
支持克隆Github, Gitlab等等
多樣的命令,比如list,find,clean,relink,import
支持插件,配置文件,hook
> 舉個(gè)簡單的例子,克隆一個(gè)Javascript項(xiàng)目,克隆之后,自動(dòng)運(yùn)行 npm install 或 yarn > 想要什么樣的插件,什么用的hook,隨你配置那些踩過的坑 權(quán)限問題
FIX ME : Windows下,如果克隆到一半,手動(dòng)中斷進(jìn)程,則克隆下來的項(xiàng)目是只讀,無法修改,無法刪除。
嘗試通過node修改權(quán)限為777,最后無果, 不了了之。
這樣會(huì)導(dǎo)致一些命令因?yàn)闆]有權(quán)限而失敗
交互方式交互方式的選擇一直是我蛋疼的問題,又要兼容多平臺(tái),又要簡單優(yōu)雅。
比如 gpm find,搜索某個(gè)倉庫,然后獲取相應(yīng)的信息
方式一:輸入(半)全稱
gpm find @gpmer/gpm.js
優(yōu)點(diǎn):
幾乎能精準(zhǔn)搜索
跨終端兼容性好
缺點(diǎn):
太繁瑣,除了自己的庫,其他人的庫我看并不記得。
方式二:詢問/篩選
gpm find
會(huì)在終端監(jiān)聽輸入的關(guān)鍵字,根據(jù)關(guān)鍵字篩選出一系列的倉庫。
然后通過上下箭頭,選擇倉庫
優(yōu)點(diǎn):
沒必要輸入繁瑣的關(guān)鍵字,只需要記得大概
缺點(diǎn):
有兼容性問題,linux和OS X下沒有問題,Windows下兼容pwoerShell和cmd,但是不兼容git bash
unix路徑和windows路徑Linux和OS X都是unix形式的路徑, 在gpm add xxx, 可以直接復(fù)制路徑, cd到對應(yīng)的目錄.
Windows下, 獲取到的是Windows風(fēng)格的路徑, 如果你在使用Git Bash. 很顯然是不能cd的.
折中方案是加個(gè)-u, --unix參數(shù), 選擇輸出unix的路徑
添加倉庫之后, 在終端自動(dòng)cd到項(xiàng)目目錄在nodejs里面, 無論怎么改變工作目錄, 也只是改變了這個(gè)(子)進(jìn)程的工作目錄. 沒法改變所使用的終端的工作目錄.
后來終于發(fā)現(xiàn)了robotjs自動(dòng)化工具.
可以在終端輸入命令, 然后Enter.
可惜的是, 又是Windows不兼容. 而且robotjs的包還不小, 對于頻繁升級(jí)是一種負(fù)擔(dān).
所幸就放棄了自動(dòng)cd到工作目錄的念頭
全局插件FIX ME: 添加了插件機(jī)制,豐富了一些功能。克隆之后,自動(dòng)運(yùn)行 npm install 或 yarn。
只需要在命令后面加個(gè)參數(shù): gpm add xxx -p <插件名>
要引用全局插件,就必須要知道npm的全局node_modules在哪里。
很遺憾的是,Windows下,獲取到的位置不正確,導(dǎo)致插件不能正常調(diào)用。
你可以在你的項(xiàng)目創(chuàng)建一個(gè).gpmrc配置文件,里面寫一些hook,比如:
{ "hooks":{ "add": "npm install" } }
當(dāng)通過gpm添加這個(gè)項(xiàng)目之后,則運(yùn)行hooks里面對應(yīng)的shell。
FIX ME 問題就在于這個(gè)shell,并不安全。如果要是rm -rf /,恰巧又以root權(quán)限運(yùn)行,那就悲劇了。
還有就是多重的shell,比如npm install && npm run build怎么去運(yùn)行。
這不是很簡單? 直接 exec("npm isntall && npm run build")就完事了啊
NO, NO, NO. exec()并不優(yōu)雅而且還有限制,我更喜歡用spawn
但是spawn("npm", "isntall && npm run build".split(" "))這樣是會(huì)報(bào)錯(cuò)的. && 不是有效的命令
實(shí)際上我是這么做的,上面的命令拆分成為兩條spawn("npm", ["isntall"])和spawn("npm", ["run", "build"])
導(dǎo)入已存在的項(xiàng)目你可能已經(jīng)在~/project/這個(gè)目錄下存放了很多的項(xiàng)目。如果要讓你重新gpm add xxxx一個(gè)一個(gè)的添加進(jìn)來,你愿意嗎?
程序員要偷懶,所以才有import這個(gè)命令。把已存在的項(xiàng)目,按照source > owner > name的目錄結(jié)構(gòu)擺放好。
這又涉及到一個(gè)問題。我又想導(dǎo)入,又不想破壞原來~/project/的結(jié)構(gòu),這個(gè)時(shí)候就用到link。
在對應(yīng)的source > owner > name目錄下,創(chuàng)建一個(gè)link,指向~/project/中的項(xiàng)目
問題就來了,當(dāng)你要?jiǎng)h除這個(gè)項(xiàng)目的時(shí)候,即刪除source > owner > name,會(huì)報(bào)錯(cuò)。link文件需要解除link才能刪除
測試用例有找過類似mock文件系統(tǒng)的方案,但是都感覺不太優(yōu)雅。
某天突然頓悟,為什么還有模擬什么文件系統(tǒng)呢,為什么就不能用真實(shí)的呢,臨時(shí)創(chuàng)建一個(gè)目錄,在這個(gè)目錄底下完整地走一遍流程,然后再對比預(yù)期,這樣不就好了嗎
總結(jié)從開始寫,到現(xiàn)在,commit有差不多300多次,前前后后一個(gè)多月,也一直是我一個(gè)人使用,我個(gè)人也覺得比較好用(好過沒有,逃...)
總感覺還有很多不完善的地方,但是個(gè)人能力和想法都有限,只能慢慢的完善。自己也在使用,打算長期維護(hù)。
最后給上項(xiàng)目地址:gpmer/gpm.js
我只是個(gè)菜雞 XD,希望有大牛給個(gè)PR或者給一些建議
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82122.html
摘要:使用高亮類似的擴(kuò)展更強(qiáng)大的高亮擴(kuò)展,具有更多功能。為了檢查和檢查響應(yīng),使用了之類的工具。在這里獲取這兩個(gè)擴(kuò)展自動(dòng)閉合標(biāo)記和自動(dòng)重命名標(biāo)記。類似的擴(kuò)展顯示提交歷史的精美圖表等等。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! Quokka.js Quokka.js 是一個(gè)用于 JavaScript 和 TypeScript 的實(shí)時(shí)運(yùn)行代碼平臺(tái)。這意味著它會(huì)實(shí)時(shí)運(yùn)行...
摘要:淺析筆者在此整理了常見的命令,的重要性無需多言,與其再百度海中搜索命令,不妨嘗試收藏筆者的此篇作品。旨在快速高效地處理無論規(guī)模大小的任何軟件工程。其最大特色就是分支及合并操作非常快速簡便。 淺析git 筆者在此整理了常見的git命令,git的重要性無需多言,與其再百度海中搜索git命令,不妨嘗試收藏筆者的此篇作品。希望對你的學(xué)習(xí)有所幫助。 版本控制系統(tǒng)之git Git: (一)簡介:G...
閱讀 2069·2021-09-22 15:43
閱讀 8734·2021-09-22 15:07
閱讀 1086·2021-09-03 10:28
閱讀 2059·2021-08-19 10:57
閱讀 1071·2020-01-08 12:18
閱讀 2978·2019-08-29 15:09
閱讀 1530·2019-08-29 14:05
閱讀 1645·2019-08-29 13:57