某课网C/C++气象数据中心实战,手把手教你做工业级项目

288 阅读1分钟

download: C/C++气象数据中心实战,手把手教你做工业级项目

背景

公司内部的 NPM 因为一些固有的 bug 经常被吐槽,最近刚好有时间可以来做优化,然后就尝试解一下之前遇到的一个 publish 的 bug,下边是分析记录。

问题现象

公司内网 NPM 选择的是使用 verdaccio 来做服务,目前遇到了一个模块 publish 时包含 deprecated 字段导致历史版本丢失,仅剩下本次 publish 的版本信息。

问题原因

NPM CLI 实现 deprecate 的时候流程是这样的:
github.com/npm/cli/bl.…

  1. 请求 get 接口获取当前模块的信息
  2. 然后修改符合的版本 deprecated 字段
  3. 请求 put 接口更新模块

然后新增模块在 CLI 的实现是:
github.com/npm/libnpm.…

  1. 读取本地 package.json 内容
  2. 请求 put 接口上传模块

Verdaccio 在实现 server 的时候,更新模块和上传模块是同一个服务接口,两个动作之间又没有处理好:github.com/verdaccio/.…

此部分逻辑为 deprecated 处理逻辑:github.com/verdaccio/.…

local-storage 处理逻辑:github.com/verdaccio/.…
这里删除了无效版本的信息:github.com/verdaccio/.…