使用verdaccio 搭建npm私有仓库

1. 为什么要搭建私有的npm仓库?
    随着公司的业务越来越复杂,项目迭代速度也越来越快,那么项目间的常用的业务代码共享变得非常之有必要。但是对于公司的业务代码是不能对外开放的,因此我们有必要搭建一个类似于 http://npmjs.org这个的一个私有平台来管理公司业务相关的组件及代码。
    更简单的描述就是我们需要在公司内部搭建一个npm仓库,管理包的同时,也可以借助npm的命令行工具快速用代码模块或业务组件。
但是在没有npm私有仓库之前,我们都是手动复制某个项目的某个模块到相关的项目中,这样操作比较繁琐,因此我们需要一个npm私有仓库存放相关公用的组件及模块。
2. npm及私有npm的工作原理?

我们使用npm安装,共享和分发代码,npm帮助我们管理项目中的依赖关系,当我们使用 npm install 去安装一个模块时,会先检查 node_modules目录中是否已经存在这个模块,如果没有便会向远程仓库查询。
那现在如果我们搭建了私有的npm,当我们使用 npm install 后会向私有的npm发起请求,服务器会先查询所请求的这个模块是否是我们自己的私有模块或已经缓存过的公共模块,如果是则直接返回给用户,如果不是的话,那么则会继续向上查找(也就是开源的npm仓库)去查找该模块并返回给用户。
3. 如何搭建一个私有的npm仓库呢?

搭建npm仓库一般有如下基本方法:(需要付费的这边先不写出来哦):
 1. 使用 Sinopia
 2. 使用cnpmjs.org

这边先不讲 第二种使用cnpmjs.org,因为它要搭建数据库比较麻烦,有兴趣的童靴可以自己去研究一下。那我们使用第一种哦,那为什么我们现在不用Sinopia呢?而使用 verdaccio 来搭建呢?那是因为 Sinopia 库作者两年前就已经停止了更新了,所以之后就出来了verdaccio(查看github地址
https://github.com/verdaccio/verdaccio)

搭建过程如下:

1. 首先需要安装node环境,反正我电脑上已经安装了,哈哈~ 这边先不介绍了。
2. 安装 verdaccio
使用命令:

npm install -g verdaccio

如果在安装过程中报 grywarn的权限错的话,那么需要加上 --unsafe-perm, 如下命令:

npm install -g verdaccio --unsafe-perm

3. 启动 verdaccio

安装完成后,我们就可以在命令行中 输入 verdaccio 命令运行,如下所示:

然后在浏览器中 运行 http://localhost:4873 就可以看到 如下图所示:

说明服务启动成功了;

4. verdaccio配置;

首先我们需要知道的是我们使用npm全局安装node包后,全局安装包的所有目录在什么地方,因此我们可以使用命令行查看:

1. 查看全局包的位置如下名:

npm root -g

如下图所示:

2. 进入该目录后,使用ls命令查看所有的全局包,我们可以找到我们刚刚安装的 verdaccio 包,如下图所示:

3. 进入该目录下的conf目录下, 可以看到默认的配置 default.yaml, 如下所示:

4. 需要修改 config.yaml文件,该文件就是从 default.yaml自动复制过来的,因此他们的里面配置文件是一样的。首先我们需要找到该文件,看了其他的同学的博客,感觉他们都是复制过来的,可能我的是mac电脑吧,没有他们讲的对应目录,那么config.yaml目录文件到底在哪里呢?细心的同学可能会发现,我们运行verdaccio命令后,输出的命令会告诉我们它的位置:如下图所示:

5. 进入该文件的目录下找到 config.yaml, 网上都说对应的目录下默认有两个文件:可是我在命令行下只看到一个文件,嗨!先不管这些;我们先要打开该配置文件
进行配置,由于我用的是 sublime text编辑器,因此我这边可以运行命令即可打开进行配置修改: sudo open ./config.yaml -a 'sublime text';

如下图所示:

config.yaml 配置如下: 最后一行是新增的配置:

#
# This is the default config file. It allows all users to do anything,
# so don't use it on production systems.
#
# Look here for more config file examples:
# https://github.com/verdaccio/verdaccio/tree/master/conf
## path to a directory with all packages
storage: /Users/tugenhua/.local/share/verdaccio/storageauth:htpasswd:file: ./htpasswd# Maximum amount of users allowed to register, defaults to "+inf".# You can set this to -1 to disable registration.#max_users: 1000# a list of other known repositories we can talk to
uplinks:npmjs:url: https://registry.npmjs.org/packages:'@*/*':# scoped packagesaccess: $allpublish: $authenticatedproxy: npmjs'**':# allow all users (including non-authenticated users) to read and# publish all packages## you can specify usernames/groupnames (depending on your auth plugin)# and three keywords: "$all", "$anonymous", "$authenticated"access: $all# allow all known users to publish packages# (anyone can register by default, remember?)publish: $authenticated# if package is not available locally, proxy requests to 'npmjs' registryproxy: npmjs# To use `npm audit` uncomment the following section
middlewares:audit:enabled: true# log settings
logs:- {type: stdout, format: pretty, level: http}#- {type: file, path: verdaccio.log, level: info}# 如下是新增的,默认是没有的,只能在本机访问,添加完成后就可以在外网访问了~
listen: 0.0.0.0:4873  

6. 通过pm2启动verdaccio

启动: 直接在终端通过 verdaccio 命令启动服务时,我们一般会借助pm2工具进行进程管理。
pm2安装方式:

npm install -g pm2

通过pm2启动 verdaccio

pm2 start which verdaccio 

如下图所示:

停止服务:如果需要停止 verdaccio服务,使用如下命令即可:

pm2 stop which verdaccio

接着我们在页面再刷新下 http://localhost:4873/#/ 就访问不到了,我们需要重新启动下即可:

使用pm2查看verdaccio进程下的实时日志:

pm2 show verdaccio

如下所示:

通过如上命令,我们可以看到所有的 verdaccio的所有信息,打开 out log path查看进程输出日志,如果出现错误的话,我们也可以打开 error log查看错误日志。
7. verdaccio的使用

在使用verdaccio之前,我们可以先安装nrm来管理自己的npm代理,nrm可以快速修改,切换,增加npm镜像地址。

先安装 nrm, 命令如下:

npm install -g nrm

想要了解更多有关的nrm命令,可以使用 nrm --help, 会列出所有的命令行的。

7.1 添加别名

我这边为了演示下,搭建的地址为 http://192.168.77.1:4873,你们自己可以修改自己的服务器ip地址了;如下命令:

nrm add verdaccio http://192.168.77.1:4873

如上的 命令 nrm add verdaccio http://192.168.77.1:4873 中的verdaccio是我为私有npm起的别名,你们自己可以更改自己喜欢的名字,现在我们可以使用 nrm ls 命令查看 使用的所有镜像源地址,verdaccio 就是我们刚刚新增的,如下图所示:

如果我们现在不想从私有npm上下载包的话,我们可以使用 nrm use xx命令,use下地址。

8. npm 发布包

要在私有npm仓库中发布包首先需要注册或登录账号。如果我们还没有账号的话,通过输入命令 npm adduser, 然后依次输入用户名,密码即可创建完毕。如果已有账号,通过输入命令 npm login,然后依次输入用户名,密码即可登录。然后进入我们需要上传的代码目录,执行命令发布即可;

如下图所示:

我项目中随便弄了一个项目名称叫 npmtest, 里面也是一样什么都没有,npm init新建一个 package.json, 然后里面就一个 index.js文件,内容就是一个
console.log('私有npm我来了'); 这样的,我想上传到上去,package.json 代码如下:

{"name": "npmtest","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC"
}

其中包名就叫 npmtest. 在项目的目录下,先登录,如下:

然后发布我们的代码:我们可以使用 npm publish命令来发布包;如下所示:

npm publish --registry http://localhost:4873

但是在发布之前,一定要切记,当当前的npm源切换到官方npm源下:如下图所示:

但是当我发布的时候,报错,如下所示:

应该是npm版本太低了(我当时的版本是3.xxx),因此我更新到最新的版本6.xx来了;

更新npm版本:如下命令:

npm install -g npm 

更新完成后就可以发布了,执行命令:npm publish --registry http://localhost:4873; 如下图所示:

发布完成后,在刷新下 http://localhost:4873/#/ 就可以看到我们刚刚发布的包了,

9. npm 下载包

最后我们再验证下,我们新建一个文件夹为 npmtest2,进入到该项目的根目录下,使用命令 npm install npmtest 下载我们刚刚发布到私有的npm包;

如下图所示:

下载完成后,我们可以看到有两个文件,一个是node_modules,就是我们需要依赖的文件,里面有npmtest项目文件,还有一个是 package-lock.json文件,该文件是更新node库后自动生成的文件,里面包含了node库中所有包的下载地址当前版本以及包之间的依赖关系。当我们下载包时候就会根据package-lock.json的
版本去现在,就不会再去npmjs去检查了。这样就会提升下载速度。

使用verdaccio 搭建npm私有仓库相关推荐

  1. verdaccio内网离线搭建npm私有仓库

    使用场景: 前端项目的编译运行开发中报下载经常出错: 项目场景:通常我们前端项目开发搭建过程中通过npm管理前端js库,新建项目或内网开发过程中经常出现环境搭建的问题,例如常见错误Failed at ...

  2. 前端人员如何在linux服务器上搭建npm私有库

    为什么要搭建npm私有库? 为了方便下载时,公共包走npmjs,私有包走内部服务器. npm包下载的速度较慢,搭建npm私有库之后,会先操作私有库中是否有缓存,有缓存直接走缓存,而不用重新再去请求一遍 ...

  3. 搭建Maven私有仓库

    内部的项目并且需要多团队协作模块化开发的时候,自然会想到搭建自己的maven私有仓库,本文主要介绍如何搭建maven私服和如何在项目中添加依赖. Maven 的远程仓库分为中央仓库和私服仓库.中央仓库 ...

  4. Docker容器之搭建本地私有仓库

    Docker容器之搭建本地私有仓库 前言 一.首先下载registry镜像 二.在daemon.json文件中添加私有镜像仓库的地址并重启 三.创建registry容器并开放端口 四.给镜像打标签后上 ...

  5. 1+X 云计算运维与开发(中级)案例实战——搭建harbor私有仓库并实现主从同步

    1+X 云计算运维与开发(中级)案例实战--搭建harbor私有仓库并实现主从同步 前言 思路 实操 1.(个人习惯)修改主机名,添加主机映射 2. 配置镜像加速器 3. 生成CA证书,并分发证书 4 ...

  6. 【云原生Docker系列第十篇】搭建本地私有仓库(我问青山何时老,青山问我几时闲)

    文章目录 系列文章目录 前言 一.搭建本地私有仓库过程 首先下载registry镜像 在daemon.json文件中添加私有镜像仓库地址 运行registry 为镜像打标签 上传到私有仓库 列出私有仓 ...

  7. docker之搭建gitlab私有仓库服务

    简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...

  8. Docker搭建Registry私有仓库

    Docker搭建Registry私有仓库 简介 私有仓库安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了.然而不太方便的地方是不能直观的查看 registry 中的资源 ...

  9. Linux搭建GitLab私有仓库,并内网穿透实现公网访问

    文章目录 前言 1. 下载Gitlab 2. 安装Gitlab 3. 启动Gitlab 4. 安装cpolar 5. 创建隧道配置访问地址 6. 固定GitLab访问地址 6.1 保留二级子域名 6. ...

最新文章

  1. flutter 按钮_flutter好用的轮子推荐二-点赞按钮动画
  2. css float left right 中间空间城数据无法显示
  3. zcmu1540(二分)
  4. android usb host hid,Android USB Host与HID通讯
  5. 高端服务器CPU详细图解
  6. Java整合Spring发送邮件
  7. ajax 返回flase,Django request.is_ajax返回false
  8. PHP获取远程文件内容
  9. Linux下tomcat修改端口(80)
  10. Python-人脸识别并判断表情 笑脸或非笑脸 使用笑脸数据集genki4k
  11. C#人民币金额大写转换
  12. 对搜索引擎技术的认识和发展
  13. 户用光伏数字化解决方案
  14. bootstrap按钮组btn-group
  15. Sql递归(用with 实现递归查询)
  16. 几倍根号用学生计算机,几倍根号几怎么算不要网上抄的 祥细的 例如2√2 3√3 4√4 怎么算...
  17. 唯样商城:扩展用于汽车以太网的 ESD 保护解决方案产品组合
  18. 代理模式 Proxy
  19. 虚拟内存如何设置最好?
  20. java gui-设计日历软件

热门文章

  1. tf.keras.losses.SquaredHinge 损失函数 示例
  2. python 程序打包成 exe 文件
  3. flask secure_filename 不能识别中文名的解决办法
  4. 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》
  5. U-NET 图像预处理
  6. centos/Debian/Ubuntu下编译安装pypy
  7. Qt最新版5.12在Windows环境静态编译安装和部署的完整过程(VS2017)
  8. 回调函数自定义传参_koroFileHeader:一个用于生成文件头部注释和函数注释的插件...
  9. oracle字符串提取函数,oracle字符串分割和提取函数定义
  10. 【Zookeeper】Zookeeper集群“脑裂”问题处理大全