前端verdaccio搭建npm私服(linux)+客户端使用包

前言
最近想在公司内网上搭建一个npm服务,只供公司内部使用。有两个工具sinopia的github地址verdaccio的github地址,但是sinopia在四年前已经停止更新了,没人维护了,留下许多坑。幸好有一群大佬又从sinopia开了一个分支,更名为verdaccio。最近的一次更新我看是在10小时前~
verdaccio官网

搭建npm私服的好处

1、包在公司内部自己的服务器上,不会发布到外网;
2、下载包和发布包都有权限管理
3、项目中我们用到包可以直接缓存在我们自己到服务器,不用再到npm中下载,直接从服务器中下载,速度得到提升,比淘宝镜像的速度还快
4、可以将公司自己开发到包,发布到服务上,供公司内部使用

1、 服务器端搭建

1.1、在你的Linux服务端安装node环境

node -v //查看是否已经安装过node,已经安装跳过此步骤

有两种方式下载:
1、下载到本地后上传到服务器下载地址
2、wget下载到本地目录

$ wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz

解压及重命名:

$ xz -d node-v9.3.0-linux-x64.tar.xz 
$ tar -xf node-v9.3.0-linux-x64.tar
$ mv node-v9.3.0-linux-x64 node-v9.3.0

设置node全局环境变量

vi .bash_profile  // 修改用户环境变量文件

键入i,进入插入模式

export NODE_HOME=/usr/local/node-v9.3.0/bin
export PATH=$PATH:$NODE_HOME

Esc退出插入模式,shift+;后输入wq保存并且退出
让修改的环境变量文件生效

source .bash_profile

验证

node -v
npm -v

1.2 安装verdaccio(加上–unsafe-perm的原因是防止报grywarn权限的错)

npm install -g verdaccio --unsafe-perm

1.3 修改配置文件

vi /root/.config/verdaccio/config.yaml

在配置文件末尾最后添加监听端口

listen: 0.0.0.0:4873 // verdaccio 默认端口
image.png

1.4 启动verdaccio

verdaccio
image.png

到这里就可以看到我们启动成功的页面了,在浏览器中访问我们服务端的ip:


image.png

helloworld是我已经上传的一个测试包。

1.5 利用pm2一直守护verdaccio进程

直接使用 verdaccio虽然可以正常启动,但是不能一直保持进程开启,所以我们可以使用pm2来对verdaccio进程进行托管启动

1.5.1 安装pm2
npm install -g pm2 --unsafe-perm
1.5.2 pm2启动verdaccio
pm2 start verdaccio
1.5.3 查看pm2 守护下的进程verdaccio的实时日志
pm2 show verdaccio 

通过这个命令我们可以从下图中看到所有verdaccio的所有信息,打开 out log path查看进程输出日志,出现错误时候也可以打开error log来查看错误日志


image.png

查看该路径下对日志命令:

tail /root/.pm2/logs/verdaccio-out.log
1.5.4 添加用户
npm adduser --registry http://172.29.XX.XX:4873        //后面是我们的私服地址

会让你输入用户名、密码、邮箱即可~
然后可以在页面中登录

image.png

2、 客户端使用

2.1 设置下载源

如上,我们使用的服务端的ip地址为172.29.xx.39:4873
查看npmrc文件内容,此文件内容是npm镜像下载源的地址

cat .npmrc //linux用cat,window用type

此时我们可以看到当我们使用npm下载包时候,镜像源是npmjs.org. 所以我们使用命令将下载源的地址切换到我们到服务器

npm set registry 172.29.xx.39:4873 

2.2 安装nrm

nrm是 npm registry 管理工具, 能够查看(nrm ls)和切换(nrm use xx)当前使用的registry。不安装也可以,安装会更高效。

npm install -g nrm

2.3 添加自己服务器到地址到nrm

这里为了方便,我给自己服务器到地址取了一个别名,为了使用和切换更方便

nrm add my39 http://172.29.xx.39:4873 

这里你可以查看当前有哪些下载源:

nrm ls
image.png

将npm包的下载地址改到my39的私服

nrm use my39

关于nrm
其实nrm只是个npm registry 管理工具,有了它可以让我们切换和查看registry 地址更方便快捷,即便没有它,我们直接用npm的set命令也可以切换地址,用cat命令也可以查看地址,只不过用nrm更便捷,用不用随你了,觉得方便就用。

2.4 发布包

在桌面新建一个HelloWorld文件夹,里面放如index.js和README.md,然后打开命令行,切换到HelloWorld文件目录下

npm init 

根据提示填写,会自动生成一个package.json文件
到这里就可以使用npm publish 命令来发布包了

npm publish // 在服务器地址的情况下
npm publish --registry http://172.29.xx.39:4873 //在客户端的情况下,直接加后缀发布到私服

如果你在客户端未登录到情况下,它会给你提示让你去登录

npm login

输入用户名、密码、邮箱,然后再执行:

npm publish --registry http://172.29.xx.39:4873

2.5 验证能否下载

image.png

最后

当我们执行npm install的时候,它是根据当前定位文件夹下package.json文件去下载包,包括间接依赖的包第一次下载之后的包都会缓存在我们的私服上,然后后期下载的时候从私服下载,就不会再从npmjs上下载包,但是它下载每个包的时候都会再走一遍npmjs去检查包的版本,即便不下载资源,但这无疑也浪费了时间。经验证发现,我们的package-lock.json文件在此刻起了大作用,因为package-lock.json文件本来就是更新node库后自动生成的文件,里面包含了node库中所有包的下载地址当前版本以及包之间的依赖关系,既然package-lock.json稳定了版本,所以当我们项目中包含了这个文件时,我们下包时就会根据package-lock.json的稳定版本来,就不会再去npmjs上去检查了,这样会极大的提升下载包的速度。所以项目中一定要有稳定的package.json和package-lock.json文件,并及时更新这两个文件

注意:如果我们在项目中用了npm-shrinkwrap.json这个文件来锁定版本,我们在安装包的时候可能会报错Maximum call stack size exceeded

解决方案:
1、删除npm-shrinkwrap.jsonyarn.lock
2、删除node_modules

sudo rm -rf node_modules

3、重新安装包,生成package-lock.json文件

sudo npm install

成功之后,你会看到package-lock.json中锁定的下载地址都是我们私服上的地址

尊重原创,我只是在基础添加了一点自己踩的坑,然后自己做个记录~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342