文章目录

  • 前言
  • 开始
  • 配置加速
  • 安装verdaccio
  • 优化
  • 全局配置
  • 项目配置
  • 便捷工具
  • 备注


前言

在工作开发的过程中,不可避免的会封装一些自己的组件,工具库,甚至脚手架等等。但受限于公司的规定,或者其他原因,这些封装好的npm包一般不会对外去发布,所以我们会选择架设自己的npm私服。

主流的npm私服部署方案包含verdaccio以及nexus。前者是基于nodejs的私服,而后者用途更为广泛,比如maven私服基本会基于nexus。个人感觉verdaccio更小而美一些,所以本文主要介绍verdaccio的部署方式。

之前本来想在centos上去直接安装,发现由于系统版本低,node版本太高导致报错如下:

node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by node)

网上看解决办法是升级GLIBC的版本或手动编译nodejs。GLIBC作为centos底层库升级之后恐怕会引起别的问题,而手动编译也不知道nodejs的使用会有什么问题。考虑到我也是个人使用,所以直接选择了docker进行安装。

开始

首先安装docker的客户端,访问官方下载地址,点击下载安装即可。

docker nexus安装 修改配置 docker安装npm_ci


找到适合你的安装包,之后各种下一步下一步的安装,此处略过。

配置加速

由于国外网速比较慢,而且docker下载的东西几乎都很大,所以很有必要配置加速镜像。我这里使用的阿里云的镜像加速服务。你需要先注册一个阿里云账户。之后的使用时免费的。

注册成功之后进入阿里云控制台,点击如下镜像加速服务

docker nexus安装 修改配置 docker安装npm_ci_02


我这里是用的windows,mac的配置是一致的。其他的系统按照其说明进行修改即可。

docker nexus安装 修改配置 docker安装npm_ci_03


以下,Docker中配置镜像

docker nexus安装 修改配置 docker安装npm_docker_04


之后保存,就大功告成了!

安装verdaccio

有了docker,一切都变得很简单。首先打开命令行工具,执行以下命令:

docker nexus安装 修改配置 docker安装npm_ci_05


这样你就已经下载好最新的verdaccio镜像了,如果你需要下载指定版本的verdaccio,可以访问官方的dockerhup地址来查看下载列表。

接下来就是启动服务了:

$ docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio

verdaccio默认的启动端口是4873,故以下命令式将本机的相同端口映射到docker。

docker nexus安装 修改配置 docker安装npm_ci_06


以下就表示启动成功了,接着打开浏览器,访问localhost:4873

docker nexus安装 修改配置 docker安装npm_docker nexus安装 修改配置_07


哈哈,如上已经配好你的npm私服啦。我用我蹩脚的英语给大家翻译一下:

No Package Published Yet. // 还没有发布任何包
To publish your first package just: // 按如下操作进行发布
1. Login // 登陆
npm adduser --registry http://192.168.0.201:4873
2. Publish // 发布
npm publish --registry http://192.168.0.201:4873
3. Refresh this page. // 刷新网页

赶紧来试一下:

创建用户并登陆。

docker nexus安装 修改配置 docker安装npm_docker nexus安装 修改配置_08


创建项目

docker nexus安装 修改配置 docker安装npm_ci_09


发布!

docker nexus安装 修改配置 docker安装npm_ci_10


刷新页面,可以看到已经成功发布了!

docker nexus安装 修改配置 docker安装npm_npm_11

优化

话说每次发布都要加上--registry的参数,略微显得有些low,而且多人协作的时候,我们希望项目的发布地址就是自己的私服,其实这个更改可以分别从全局或项目中配置。

全局配置

修改~/.npmrc。即修改全局的npm服务器地址。比如我们一般设置淘宝的镜像源就会这样设置。

YanandeMac-mini:~ yananliu$ cat .npmrc
registry=https://registry.npm.taobao.org/

以上,可以修改这个地址到你的私服地址,这样就会全局生效,下载的时候也会通过私服,若私服中没有就会再去npm官方源去下载。

当然,官方源是很慢的,我们实际是希望从私服下载,私服不存在就从淘宝源下载。这个需要修改一下刚才启动docker的配置

$ docker run -it -d --rm --name verdaccio -p 4873:4873 -v C:\Users\Yanan\verdaccio\:/verdaccio/ verdaccio/verdaccio
  • -d 参数是指后台运行,不会关闭命令行窗口就关闭私服
  • -v 问文件挂载,是指把宿主机的文件映射到容器内

比如刚才我执行了上边的命令,发现我配置的挂载目录出现了storage文件夹

docker nexus安装 修改配置 docker安装npm_ci_12


重要: config.yaml 需要你手动添加,因为当你配置挂载的之后,verdaccio实际上访问的是宿主机的磁盘文件夹,这个配置文件在docker容器启动时候不会自动创建,而是本身存在于项目源码中。也就是说不提供这个文件是启动不起来的。

该文件可以在https://raw.githubusercontent.com/verdaccio/verdaccio/master/conf/default.yaml这里直接复制粘贴,但不幸的是,这个文件被Q了,我把他放在文末,大家自行下载吧。

下载完成后复制文件到截图中的文件夹/conf/config.yaml,并修改上游地址,然后重启docker即可。

uplinks:
  npmjs:
    url: https://registry.npm.taobao.org/
项目配置

上边介绍了全局配置,有点跑题,现在来说下不用全局配置,仅用项目配置。有两种途径:

  • 在项目中添加.npmrc。配置与上文相同
  • 在项目的package.json中添加publishConfig
# package.json
{
  "publishConfig": {
    "registry": "http://192.168.0.201:4873"
  }
}

便捷工具

文章最后,在介绍一款便捷切换源的工具nrm

# 安装
$ npm install nrm -g

# 添加源
$ nrm add local http://192.168.0.201:4873/

# 查看可用源
$ nrm ls

  npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/
  local ------ http://192.168.0.201:4873/

# 切换私服
nrm use local

# 尝试安装个包
$ npm install webpack-cli

# 很快就安装完成了
+ webpack-cli@4.2.0
added 63 packages from 39 contributors and audited 63 packages in 13.214s

6 packages are looking for funding
  run `npm fund` for details

备注

verdaccio的配置文件下载config.yaml