打造个人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 lerna
init
在项目运用以下敕令:
$ 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"
...
}
代码搜检和范例
在一个项目中,多人开辟时会碰到代码花样题目。
处理方案:
运用Eslint
项目具有者须要全局装置:
$ 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
Prettier
Eslint + 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-quick
Tslint.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
commit 不一致
主流的要领是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 -D
changelog
经由过程手动去保护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(怎样打造范例的开源项目)