有些人会说:publish
模块包,有什么难的?直接npm publish
不就行了么?react
其实否则,咱们还会有这样的问题:git
在github
有一个包np,彷佛能解决上面的问题。github
在必定程度上确实是能够。npm
按照np
的发包流程,必需要先提交commit
,但有时候,咱们只是说想发个测试包给其余小伙伴,由于也不知道是否正确,因此不是很想先commit
。json
因此咱们必需要实现--no-git
的功能,即当有这个args
的时候,能够绕过np
的规范,进行包的提交。markdown
不过这里有一个建议是,在scripts
里面放两条命令:antd
{ "scripts": { "pub:test": "np --no-git", "pub": "np" } } 复制代码
在发测试包
的时候,用上面那条命令。发正式版本
的时候,用pub
命令。app
当选择(确认)了版本号以后,np
会对package.json
的version
修改,而且提交commit
,生成本地tag
。工具
这个问题会致使,发一个测试包
,最终也会生成一个tag,并且还有commit
提交记录。oop
那么是什么缘由致使的?我找了很久,终于找到罪魁祸首
,刚开始的时候,我都不敢相信:
是的,你没看错:
yarn version --version 版本号
复制代码
就是作了如下几个事:
一般咱们作一个规范点的组件包
,都会使用commitizen
。
固然还要结合.commitlintrc
,来规范和约束咱们的commit message
。
那么问题来了:
yarn version --verion 版本号
的commit message
type
叫什么比较好?我我的这边给起的type
值是publish
。随后咱们找一下文档,发现yarn
有相似的命令是提供出来的:(npm也是能够经过查文档找到)
yarn config set version-git-message "v%s" 复制代码
如何守护npm publish
命令,就是在当前模块包下,禁用npm publish
,转而使用yarn pub
来发布模块包。
在antd-tools
里面其实有提供guard
的命令,咱们简单翻一下源码就能够清楚了,核心是这句话:
看明白了源码,真要发包,也能够经过:
npm publish --with-antd-tools
复制代码
从np
的角度来看,咱们还要想办法传一些相似--with-antd-tools
的标识。
算是第四个问题的延伸,一般第四个问题要守护
的话,作法是这样的:
{ "scripts": { "prepublish": "antd-tools run guard", "prepare": "antd-tools run guard", "prepublishOnly": "antd-tools run guard", } } 复制代码
若是咱们想要在publish
前进行build
或者compile
或者执行其余命令,要放在哪里?
固然你能够选择prepublishOnly
命令,经过&&
和守护关联起来。
antd-tools
的作法是经过pre-publish
的命令,在该工具中,publish
执行的时候,就会先运行pre-publish
。
因此咱们其实也能够考虑放到np
这个包里面去。固然执行时机是在test
以后,由于test
没有经过,执行build
或者其余的,我的感受意义不大。
结束了么?不不不,上面所说的只是普通组件发布。
在一些场景下,咱们须要使用lerna
来创建多个packages
。
那么问题来了,怎么维护tags
,由于默认的发包tags
是这样的:
我试图从create-react-app
上寻找他们的方案:
OK,那么也就是咱们要调整一下下面的这个参数了:
经过对以上六个问题的思考,咱们能够明白publish
里面包含了不少不少东西。
有些坑,咱们不去踩,永远都不知道这里面有些什么东西。