摘要:打造個人團隊適用的開源項目規范是一個用來優化托管在上的多代碼庫的工作流的一個管理工具可以讓你在主項目下管理多個子項目,從而解決了多個包互相依賴,且發布時需要手動維護多個包的問題。
打造個人or團隊適用的開源項目規范 lerna
Lerna 是一個用來優化托管在gitnpm上的多package代碼庫的工作流的一個管理工具,可以讓你在主項目下管理多個子項目,從而解決了多個包互相依賴,且發布時需要手動維護多個包的問題。
lerna的文件樹:
my-lerna-repo/ package.json packages/ package-1/ package.json package-2/ package.json
首先作為項目擁有者全局安裝:
$ npm install -g lerna # or $ yarn global add lernainit
在項目使用以下命令:
$ lerna init # or $ lerna init --independent
這條命令要注意的是,lerna提供兩類管理項目的模式:
fixed/locked mode(default)
Fixed模式下,項目通過單一的版本進行控制。版本號放在項目根目錄下的lerna.json文件的version這個字段。當你執行 lerna publish,如果有文件更新,它將發布新的版本。
independent mode(—independent)
這種模式下,項目里的各個package獨立維護自己的version,它將會忽略lerna.json中定義的version
publish$ lerna publish
Publish它做了以下幾件事情
發布項目里的每個模塊
執行lerna updated確定是否需要發布
假如需要發布 給lerna.json 版本號做自增
更新package.json里的版本號至最新
為新版本更新dependencies
為新版本創建一個git commit 和tag
發布更新項目到npm
一次發布所有packages
只有你在package.json里設置private: true這個包則不會被發布。
配置如果我們使用yarn我們可以在lerna.json做如下配置:
{ ... "npmClient": "yarn" ... }代碼檢查和規范
在一個項目中,多人開發時會遇到代碼格式問題。
解決方案:
項目擁有者需要全局安裝:
$ npm install eslint -g # or $ yarn global add eslint
在項目中執行命令:
$ eslint --init
React項目推薦使用airbnb規范。
{ "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 解決了代碼風格和格式化的所有問題。
與git hook來解決何時lint目前比較成熟的是husky與lint-staged兩者結合:
$ 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
如果你的項目使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文件,然后去根據文檔自行定義。再給自己使用的編輯器安裝editorConfig的插件即可。
官方網站:EditorConfig
主流的方法是commitizen.
項目擁有者應當全局安裝:
$ npm install -g commitizen # or $ yarn global add commitizen
之后我們在項目里選用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”)。
原因是因為npm-scripts有一個“feature”,它自動運行名稱為prexxx的腳本,其中xxx是另一個腳本的名稱。
本質上,如果您將腳本命名為“commit”,則npm和husky將運行兩次“precommit”腳本,并且解決方法是阻止npm觸發的precommit腳本。
之后如果有別人也參與進你的項目開發中,我們最好在倉庫里也安裝依賴
$ npm install -D commitizen # or $ yarn add commititzen -Dchangelog
通過手動去維護changelog在我之前的那個wx-tsApi項目中是非常頭疼的一件事情,所以去尋找自動化的東西。
全局安裝
$ 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(如何打造規范的開源項目)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103714.html
在工作學習之余,你可能會萌生做一個開源項目的想法。一方面將自己的好代碼分享出去幫助更多開發者,另一方面也希望在開源社區中得到反饋和成長。如果項目能獲得很多的關注那更是錦上添花,高 Star 不僅是衡量開源項目可靠程度的一個重要依據,這樣項目維護者的 Github 也能在招聘中讓公司提前了解候選人的開源貢獻、技術熱情和編程習慣等,獲得面試官的加分。 那么,開源項目怎么才能獲得更多的 Star 數呢?...
摘要:開源社區的成員將人工智能入門疏解的每本書的章節拆開,再按照知識點合并,手動整理了人工智能知識樹。目前主要負責新聞資訊相關,以及配合組織內各大佬的工作。作為一個開源組織,你們目前需要什么來自外界的幫助期待公益基金贊助萬元年。 showImg(https://segmentfault.com/img/remote/1460000019363357); 作者 | Just 出品 | AI...
摘要:行爬取頂點全網任意小說掘金之前連續多篇文章介紹客戶端爬取平臺,今天我們從零開始,實現爬取頂點小說網任意一本小說的功能。文件標記所有文件我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發與架構。 30行js爬取頂點全網任意小說 - 掘金之前連續多篇文章介紹客戶端爬取平臺(dspider),今天我們從零開始,實現爬取頂點小說網任意一本小說的功能。 如果你還不知道客戶端爬取,可以先看...
摘要:行爬取頂點全網任意小說掘金之前連續多篇文章介紹客戶端爬取平臺,今天我們從零開始,實現爬取頂點小說網任意一本小說的功能。文件標記所有文件我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發與架構。 30行js爬取頂點全網任意小說 - 掘金之前連續多篇文章介紹客戶端爬取平臺(dspider),今天我們從零開始,實現爬取頂點小說網任意一本小說的功能。 如果你還不知道客戶端爬取,可以先看...
閱讀 1383·2021-11-04 16:11
閱讀 3043·2021-10-12 10:11
閱讀 2975·2021-09-29 09:47
閱讀 1615·2021-09-22 15:40
閱讀 1013·2019-08-29 15:43
閱讀 2804·2019-08-29 13:50
閱讀 1579·2019-08-29 13:28
閱讀 2691·2019-08-29 12:54