npm 模块发布到 npm

2020年3月16日,GitHub 收购 npm,大概内容如下:

Nat Friedman 宣布 GitHub 已签署收购 npm 的协议,并表示 npm 加入 GitHub 后会继续免费提供 public registry 服务。交易完成后,GitHub 的工作重点包括:未来会将 npm 集成至 GitHub 以提升开源软件供应链的安全性,并让用户能够跟踪从 GitHub PR 到修复问题的 npm 软件包版本的更改。

情况不妙

本来是件好事,但我最近写了个新模块,npm publish 的时候发现居然是发到了 GitHub 的 Packages 下。
虽然也没啥问题,只是我们安装的时候会从 GitHub 安装,慢一点而已,我安装了下,大概10秒可以安装好,问题不大。

然后我让我同事试了下,他却死活安装不上,还显示 404
这就蛋疼了,为什么我可以安装,他那却不行呢。

我也不想去研究 npm,就想先发到 npm 上,因为国情问题,我们都用淘宝镜像,所以目前稳妥的方法就是发到 npm 上。
谷歌了下,没找到答案,突然想起了个模块 np,这是个规范化模块发布流程的工具,我试了下,成功发到 npm 上了。

但我不想每次都这么操作一遍,就想一键发到 npm,于是简单跟踪调试了下 npm 发布过程。

简单描述下就是 npm 默认配置是 registry: 'https://registry.npmjs.org',然后会读取 package.json 中的 publishConfig 配置,如果没有就替换为 GitHub 的 registry 地址。

那么事情就简单了。

添加发布配置

在 package.json 中加入如下配置

1
2
3
4
"publishConfig": {
"registry": "https://registry.npmjs.org",
"access": "public"
},

如果你是发布到组织的,那么使用如下配置

1
2
3
4
"publishConfig": {
"@52cik:registry": "https://registry.npmjs.org",
"access": "public"
},

其中 @52cik 是我的组织,例如 vue 组织就是 @vue,自行更改即可。
access 是发布为公共模块,因为 npm 之前改版,所以需要加个公共模块配置。

接着 npm publish 即可,然后安装模块试试,看看有没有走淘宝镜像,如果没有,等淘宝10分钟同步一次后再试。

小结

这只是暂时解决方案,以后技术发展什么样还不确定,所以请根据自己的时间,合理使用即可。
我们前都依赖淘宝镜像,所以发布到 npm 上才是目前最优解,如果以后 GitHub 速度跟淘宝镜像一样了,那还折腾啥,对不?