摘要:打造個人團(tuán)隊(duì)適用的開源項(xiàng)目規(guī)范是一個用來優(yōu)化托管在上的多代碼庫的工作流的一個管理工具可以讓你在主項(xiàng)目下管理多個子項(xiàng)目,從而解決了多個包互相依賴,且發(fā)布時需要手動維護(hù)多個包的問題。
打造個人or團(tuán)隊(duì)適用的開源項(xiàng)目規(guī)范 lerna
Lerna 是一個用來優(yōu)化托管在gitnpm上的多package代碼庫的工作流的一個管理工具,可以讓你在主項(xiàng)目下管理多個子項(xiàng)目,從而解決了多個包互相依賴,且發(fā)布時需要手動維護(hù)多個包的問題。
lerna的文件樹:
my-lerna-repo/ package.json packages/ package-1/ package.json package-2/ package.json
首先作為項(xiàng)目擁有者全局安裝:
$ npm install -g lerna # or $ yarn global add lernainit
在項(xiàng)目使用以下命令:
$ lerna init # or $ lerna init --independent
這條命令要注意的是,lerna提供兩類管理項(xiàng)目的模式:
fixed/locked mode(default)
Fixed模式下,項(xiàng)目通過單一的版本進(jìn)行控制。版本號放在項(xiàng)目根目錄下的lerna.json文件的version這個字段。當(dāng)你執(zhí)行 lerna publish,如果有文件更新,它將發(fā)布新的版本。
independent mode(—independent)
這種模式下,項(xiàng)目里的各個package獨(dú)立維護(hù)自己的version,它將會忽略lerna.json中定義的version
publish$ lerna publish
Publish它做了以下幾件事情
發(fā)布項(xiàng)目里的每個模塊
執(zhí)行l(wèi)erna updated確定是否需要發(fā)布
假如需要發(fā)布 給lerna.json 版本號做自增
更新package.json里的版本號至最新
為新版本更新dependencies
為新版本創(chuàng)建一個git commit 和tag
發(fā)布更新項(xiàng)目到npm
一次發(fā)布所有packages
只有你在package.json里設(shè)置private: true這個包則不會被發(fā)布。
配置如果我們使用yarn我們可以在lerna.json做如下配置:
{ ... "npmClient": "yarn" ... }代碼檢查和規(guī)范
在一個項(xiàng)目中,多人開發(fā)時會遇到代碼格式問題。
解決方案:
項(xiàng)目擁有者需要全局安裝:
$ npm install eslint -g # or $ yarn global add eslint
在項(xiàng)目中執(zhí)行命令:
$ eslint --init
React項(xiàng)目推薦使用airbnb規(guī)范。
{ "devDependencies": { "eslint": "^4.19.1", "eslint-config-airbnb": "^17.0.0", "eslint-plugin-import": "^2.13.0", "eslint-plugin-react": "^7.10.0", "eslint-plugin-jsx-a11y": "^6.1.1" } }使用Standard
參考中文文檔 standard/README-zhcn.md at master · standard/standard · GitHub
PrettierEslint + prettier 解決了代碼風(fēng)格和格式化的所有問題。
與git hook來解決何時lint目前比較成熟的是husky與lint-staged兩者結(jié)合:
$ npm install lint-staged husky -D # or $ yarn add lint-staged husky -D
接著在package.json中加入:
"lint-staged": { "packages/*/src/**/*.js": [ "eslint --fix", "prettier --write", "git add" ] }, "husky": { "hooks": { "pre-commit": "lint-staged" } },Tslint
如果你的項(xiàng)目使TypeScript那么tslint能幫助你許多!
$ yarn add -D prettier tslint-config-prettier tslint-plugin-prettier husky pretty-quickTslint.json
{ "defaultSeverity": "error", "extends": [ "tslint:latest", "tslint-react", "tslint-config-prettier" ], "jsRules": {}, "rules": { "prettier": [true, "./.prettierrc"], "ordered-imports": false, "object-literal-sort-keys": false }, "rulesDirectory": [ "tslint-plugin-prettier" ] }編輯器的不同
解決方案:
主流的都是使用EditorConfig
只需要在根目錄新建一個.editorconfig文件,然后去根據(jù)文檔自行定義。再給自己使用的編輯器安裝editorConfig的插件即可。
官方網(wǎng)站:EditorConfig
主流的方法是commitizen.
項(xiàng)目擁有者應(yīng)當(dāng)全局安裝:
$ npm install -g commitizen # or $ yarn global add commitizen
之后我們在項(xiàng)目里選用angular格式的commit message并在終端下輸入以下命令:
$ commitizen init cz-conventional-changelog —save-exact # or $ commitizen init cz-conventional-changelog --yarn --dev --exact
上面的命令為你做了三件事:
安裝cz-conventional-changelog的adapter的npm模塊。
將其保存到package.json的dependencies或devDependencies。
將config.commitizen鍵添加到package.json的根目錄,如下所示:
"config": { "commitizen": { "path": "cz-conventional-changelog" } }
然后在package.json里的scripts里加上
"scripts": { "commit": "git-cz" }
注意:
如果你使用像husky這樣的precommit hooks,你需要為腳本命名除“commit”之外的其他東西(例如“cm”:“git-cz”)。
原因是因?yàn)閚pm-scripts有一個“feature”,它自動運(yùn)行名稱為prexxx的腳本,其中xxx是另一個腳本的名稱。
本質(zhì)上,如果您將腳本命名為“commit”,則npm和husky將運(yùn)行兩次“precommit”腳本,并且解決方法是阻止npm觸發(fā)的precommit腳本。
之后如果有別人也參與進(jìn)你的項(xiàng)目開發(fā)中,我們最好在倉庫里也安裝依賴
$ npm install -D commitizen # or $ yarn add commititzen -Dchangelog
通過手動去維護(hù)changelog在我之前的那個wx-tsApi項(xiàng)目中是非常頭疼的一件事情,所以去尋找自動化的東西。
全局安裝
$ npm install -g conventional-changelog-cli # or $ yarn global add conventional-changelog-cli
然后在package.json文件中添加scripts
{ "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md" } }
官方推薦的工作流程:
做出改變
提交這些改變
確定Travis變成綠色
改version
changelog
commit package.json 和CHANGELOG.md文件
打Tag
push
基于lerna的工作流程(自己研究的有不對請指出):
做出改變
git-cz
"conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
commit CHANGELOG.md 文件
Git push
lerna publish
借鑒eJayYoung(如何打造規(guī)范的開源項(xiàng)目)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103714.html
在工作學(xué)習(xí)之余,你可能會萌生做一個開源項(xiàng)目的想法。一方面將自己的好代碼分享出去幫助更多開發(fā)者,另一方面也希望在開源社區(qū)中得到反饋和成長。如果項(xiàng)目能獲得很多的關(guān)注那更是錦上添花,高 Star 不僅是衡量開源項(xiàng)目可靠程度的一個重要依據(jù),這樣項(xiàng)目維護(hù)者的 Github 也能在招聘中讓公司提前了解候選人的開源貢獻(xiàn)、技術(shù)熱情和編程習(xí)慣等,獲得面試官的加分。 那么,開源項(xiàng)目怎么才能獲得更多的 Star 數(shù)呢?...
摘要:開源社區(qū)的成員將人工智能入門疏解的每本書的章節(jié)拆開,再按照知識點(diǎn)合并,手動整理了人工智能知識樹。目前主要負(fù)責(zé)新聞資訊相關(guān),以及配合組織內(nèi)各大佬的工作。作為一個開源組織,你們目前需要什么來自外界的幫助期待公益基金贊助萬元年。 showImg(https://segmentfault.com/img/remote/1460000019363357); 作者 | Just 出品 | AI...
摘要:行爬取頂點(diǎn)全網(wǎng)任意小說掘金之前連續(xù)多篇文章介紹客戶端爬取平臺,今天我們從零開始,實(shí)現(xiàn)爬取頂點(diǎn)小說網(wǎng)任意一本小說的功能。文件標(biāo)記所有文件我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發(fā)與架構(gòu)。 30行js爬取頂點(diǎn)全網(wǎng)任意小說 - 掘金之前連續(xù)多篇文章介紹客戶端爬取平臺(dspider),今天我們從零開始,實(shí)現(xiàn)爬取頂點(diǎn)小說網(wǎng)任意一本小說的功能。 如果你還不知道客戶端爬取,可以先看...
摘要:行爬取頂點(diǎn)全網(wǎng)任意小說掘金之前連續(xù)多篇文章介紹客戶端爬取平臺,今天我們從零開始,實(shí)現(xiàn)爬取頂點(diǎn)小說網(wǎng)任意一本小說的功能。文件標(biāo)記所有文件我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發(fā)與架構(gòu)。 30行js爬取頂點(diǎn)全網(wǎng)任意小說 - 掘金之前連續(xù)多篇文章介紹客戶端爬取平臺(dspider),今天我們從零開始,實(shí)現(xiàn)爬取頂點(diǎn)小說網(wǎng)任意一本小說的功能。 如果你還不知道客戶端爬取,可以先看...
閱讀 1412·2021-11-04 16:11
閱讀 3083·2021-10-12 10:11
閱讀 3014·2021-09-29 09:47
閱讀 1641·2021-09-22 15:40
閱讀 1046·2019-08-29 15:43
閱讀 2831·2019-08-29 13:50
閱讀 1611·2019-08-29 13:28
閱讀 2717·2019-08-29 12:54