Skip to content

Node 更换源使用国内镜像

npm mirror 的更新流程示意图:

npm 官方站点 http://www.npmjs.org/ 并没有被拦截,但是下载第三方依赖包的速度由于和外网联通的限制, 速度不能满足实际的使用需求. 为了加速访问, 我们可以使用镜像来进行访问了

国内有镜像站点可以供我们使用

速度非常快,镜像站会同步更新,为我们节省了好多时间.

使用 nrm 管理源

使用 nrm 来更换访问源

nrm 是 NPM Registry Manager 的缩写, 通过他可以快速切换源, 文档地址 : https://www.npmjs.com/package/nrm, nrm 同样也可以适用于 yarn 和 pnpm 等工具

$ npm install -g nrm
$ yarn global add nrm
# list all
$ nrm ls
* npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.cloud.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
  taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/
# 替换使用
$ nrm use taobao

[linux]在配置文件 ~/.npmrc 文件写入源地址

# 打开配置文件
$ vim ~/.npmrc
# 写入配置文件
registry=https://registry.npmmirror.com/

如果你不想使用国内镜像站点,只需要将 写入 ~/.npmrc 的配置内容删除即可.

临时更换访问源

通过 config 配置指向国内镜像源

$ npm config set registry https://registry.npmmirror.com
$ npm info express

通过 npm 命令指定下载源

# 在安装时候临时指定
$ npm --registry https://registry.npmmirror.com info express

其他方法

使用 cnpm 来替代 npm

使用说明查看 : https://npmmirror.com

cnpm 支持所有 npm 的命令并且可以快速同步任意模块

$ cnpm sync koa connect mocha

如果不想安装 cnpm cli 怎么办? 我们还有一个 web 页面

例如我想马上同步 koa, 直接打开浏览器: http://npmmirror.com/sync/koa

或者你是命令行控, 通过 open 命令打开:

open http://npmmirror.com/sync/koa

如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 node-gyp 来编译, node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载, 于是大家又会吐槽, 怎么 npm 安装这么慢…

好吧, 于是又要提到 --disturl 参数, 通过中国镜像来下载:

$ npm install microtime \
  --registry=http://registry.npmmirror.com \
  --disturl=https://npmmirror.com/mirrors/node

再次要提到 cnpm cli, 它已经默认将 --registry--disturl 都配置好了, 谁用谁知道 . 写到这里, 就更快疑惑那些不想安装 cnpm cli 又吐槽 npm 慢的同学是基于什么考虑不在本地安装一个 cnpm

nodejs 源码路径

下载 nodejs 源码指定的地址是: https://npmmirror.com/dist

Nodejs Release 镜像地址加速

Nodejs Release 为各平台提供预编译的 nodejs 和 npm 等二进制文件,是 https://nodejs.org/dist/ 的镜像。使用方法:

# 设定环境变量
export NODE_MIRROR=http://npmmirror.com/mirrors/node

使用 aliyun 的私有 npm 仓库

🔗 Aliyun 制品仓库

使用 aliyun 设置的制品仓库 + nrm 可以更好的设定环境并且使用内部的制品库

shell
# 添加 code
$ nrm add codeup https://packages.aliyun.com/******/npm/npm-registry/

# 使用 codeup
$ nrm use codeup

# 查看当前设置的源
$ nrm ls
  npm ---------- https://registry.npmjs.org/
  ...
  npmMirror ---- https://skimdb.npmjs.com/registry/
* codeup ------- https://packages.aliyun.com/****/npm/npm-registry/

详细的配置内容如下 仓库指南 · Npm 仓库, 设置的用户名, 密码可以将包发布到阿里云制品仓库中, 将包进行私有化, 实现内部的包安全, 这里的功能不再进行赘述

yarn 安装错误说明

设置 npm 权限(无法设置)

$ npm config set always-auth true
npm ERR! `always-auth` is not a valid npm option

npm ERR! A complete log of this run can be found in: /Users/duoli/.npm/_logs/2023-12-08T07_39_31_540Z-debug-0.log

导致运行 yarn 安装的时候出现

$ yarn install --verbose

详细的日志信息

yarn install v1.22.21
...
...
info No lockfile found.
[1/4] 🔍  Resolving packages...
...
verbose 0.647639875 Request "https://packages.aliyun.com/****/npm/npm-registry/dotenv" finished with status code 401.
verbose 0.653951458 Error: Couldn't find package "dotenv" on the "npm" registry.
...
error Couldn't find package "dotenv" on the "npm" registry.

其中有一条

verbose 0.647639875 Request "https://packages.aliyun.com/****/npm/npm-registry/dotenv" finished with status code 401.

看起来是权限的问题

在使用aliyun 镜像的时候需要注意一个问题, 就是使用 yarn 的时候

npm config set always-auth true 这个选项会报错, 但是 yarn 需要这个选项来做授权, 每次请求需要携带授权才可以不 401

npm/config/issues/17 这个帖子说这个选项 always-auth 需要根据注册商来进行设定, 这里需要手动编辑 .npmrc

在文件中加入一行

//packages.aliyun.com/****/npm/npm-registry/:always-auth=true

这样使用 yarn 更新就可以了


更新说明


2023年12月08日

  • 增加 aliyun 私有镜像, 并解决 yarn 使用阿里云镜像时候 401 无法找到指定包的问题 2023年11月21日
  • 移除 yrm, yrm 存在过时数据且不再更新, 使用nrm 替代 2021年10月27日
  • 增加 npm 站点 https://npmmirror.com
  • 增加 nrm 的说明

说明

创建时间: 2023-01-15 00:32:00 , 最后编辑于 2024-01-09 18:59:00