镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
本文将包括两部分内容:
正如在《淘宝 NPM 镜像站喊你切换新域名啦》 中预告的那样:
http://npm.taobao.org 和 http://registry.npm.taobao.org 将在 2022.06.30 号正式下线和停止 DNS 解析。
域名切换规则:
因此,有强依赖老域名的各位开发者请尽快更新到新域名,可能受到的影响和处理方式:
BTW:我们新的品牌名为: npmmirror 中国镜像站。
我们的 npmmirror 镜像站,自 2014 年正式对外服务以来,不知不觉已经 8 年,2021 年全年的包下载量高达 260 亿次(比 2020 年增长 1.5 倍)。
这些年来,Node.js 领域的技术在快速的迭代升级,我们原来的架构已经很难支撑当今如此大体量的前端生态,因此在 2021 年我们启动了技术升级,并于春节前已经切换完成。
早期我们同步 npm 源站的方式,是没有补偿机制的,所以当因为不可抗力导致同步失败时,需要社区开发者手动执行 cnpm sync 同步下。
在本次优化中,我们实现了一个简单的任务系统,来提供更好的同步补偿机制。

非常感谢阿里云这么多年来的对中国 npmmirror 镜像服务的开源赞助,只能靠仅有的广告位和每年的感谢帖子来回报这份天价的云资源账单。
这一次重构之后,我们验证下来至少可以节省一半的云服务器资源,也算是让阿里云的开源赞助可以减轻一些成本负担。
第一点是框架升级,原有的代码 是基于 Koa 的,现基于 Egg 的 TypeScript 模式完全重构:cnpm/cnpmcore 。
@HTTPController()export class DownloadController extends AbstractController {@Inject()private packageVersionDownloadRepository: PackageVersionDownloadRepository;@HTTPMethod({path: `/downloads/range/:range/:fullname(${FULLNAME_REG_STRING})`,method: HTTPMethodEnum.GET,})async showPackageDownloads(@HTTPParam() fullname: string, @HTTPParam() range: string) {// ...}}
同时,目录结构基于 DDD 领域驱动设计方式,https://www.yuque.com/liberty/rf322x
app├── common│ └── adapter # 外部服务调用├── core│ ├── entity # 核心模型,实现业务行为│ ├── event # 异步事件定义,以及消费,串联业务│ ├── service # 核心业务逻辑│ └── util├── repository│ └── model # ORM 模型,数据定义├── port│ └── controller # HTTP Controller├── schedule # 定时任务└── test # 单测
同时,我们的监控体系也切换为基于 Egg 的 Easy-Monitor 。
鉴于我们是全新架构大重构,尽管我们已经在春节前完成了老数据的全量迁移,但也引起了一些数据同步问题,在此给您带来的不便表示抱歉。
如果遇到 包版本或 mirror 大包同步缺漏问题,可以先手动 sync 一次。如还有问题,可以通过 cnpm issue 反馈,我们将在第一时间处理,请大家多体谅。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号