你真的懂`npm publish`?

有些人会说:publish模块包,有什么难的?直接npm publish不就行了么?react

其实否则,咱们还会有这样的问题:git

  • 单元测试是否经过?
  • 我怎么发测试包?
  • 发布以后可否打个tag?

github有一个包np,彷佛能解决上面的问题。github

alt

在必定程度上确实是能够。npm

第一个问题

按照np的发包流程,必需要先提交commit,但有时候,咱们只是说想发个测试包给其余小伙伴,由于也不知道是否正确,因此不是很想先commitjson

因此咱们必需要实现--no-git的功能,即当有这个args的时候,能够绕过np的规范,进行包的提交。markdown

不过这里有一个建议是,在scripts里面放两条命令:antd

{
   "scripts": {
       "pub:test": "np --no-git",
       "pub": "np"
   }
}
复制代码

在发测试包的时候,用上面那条命令。发正式版本的时候,用pub命令。app

第二个问题

当选择(确认)了版本号以后,np会对package.jsonversion修改,而且提交commit,生成本地tag工具

这个问题会致使,发一个测试包,最终也会生成一个tag,并且还有commit提交记录。oop

那么是什么缘由致使的?我找了很久,终于找到罪魁祸首,刚开始的时候,我都不敢相信:

alt

是的,你没看错:

yarn version --version 版本号
复制代码

就是作了如下几个事:

  • git add
  • git commit
  • git tag

第三个问题

一般咱们作一个规范点的组件包,都会使用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的命令,咱们简单翻一下源码就能够清楚了,核心是这句话:

alt

看明白了源码,真要发包,也能够经过:

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是这样的:

alt

我试图从create-react-app上寻找他们的方案:

alt

OK,那么也就是咱们要调整一下下面的这个参数了:

alt

结语

经过对以上六个问题的思考,咱们能够明白publish里面包含了不少不少东西。

有些坑,咱们不去踩,永远都不知道这里面有些什么东西。

相关文章
相关标签/搜索