前言
在工作开发的过程中,不可避免的会封装一些自己的组件,工具库,甚至脚手架等等。但受限于公司的规定,或者其他原因,这些封装好的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下载的东西几乎都很大,所以很有必要配置加速镜像。我这里使用的阿里云的镜像加速服务。你需要先注册一个阿里云账户。之后的使用时免费的。
注册成功之后进入阿里云控制台,点击如下镜像加速服务
我这里是用的windows,mac的配置是一致的。其他的系统按照其说明进行修改即可。
以下,Docker中配置镜像
之后保存,就大功告成了!
安装verdaccio
有了docker,一切都变得很简单。首先打开命令行工具,执行以下命令:
这样你就已经下载好最新的verdaccio镜像了,如果你需要下载指定版本的verdaccio,可以访问官方的dockerhup地址来查看下载列表。
接下来就是启动服务了:
$ docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
verdaccio默认的启动端口是4873,故以下命令式将本机的相同端口映射到docker。
以下就表示启动成功了,接着打开浏览器,访问localhost:4873
哈哈,如上已经配好你的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. // 刷新网页
赶紧来试一下:
创建用户并登陆。
创建项目
发布!
刷新页面,可以看到已经成功发布了!
优化
话说每次发布都要加上--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
文件夹
重要: 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