verdaccio私库离线和在线搭建

Npm 私库搭建

背景

​ 随着Nodejs开发的项目越来越多,Node项目管理就成了一个需要思考的问题了。如果所有项目都开源统一用 NPM 进行管理也没什么问题,但总有一些是我们不希望的完全开放的代码,作为企业是核心秘密保留在公司内部,这个时候就需要在公司内网也搭建一套 NPM 依赖管理系统。

优点

  1. 方便,公司内部开发的私有包,统一管理,方便开发和使用

  2. 安全,由于公司内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便使用

  3. 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而npm 的速度有些感人,自建的服务器会缓存下载过的包,能节省时间

verdaccio 搭建外网

  1. 下载verdaccio
npm install --global verdaccio
// mac 请执行
sudo npm i verdaccio -g
  1. 运行 ( 生成配置文件)
verdaccio
运行结果如下

在这里插入图片描述
注:这里有配置文件的地址 我本地已修改了使用在局域网中使用所以是 http:// 0.0.0.0:4783 默认是这个4783端口
3. 修改npm 地址

// 另外开一个命令窗口
// 查看本地npm 指向远程地址
npm config ls
// 这是可以看到 
// registry = https://registry.npmjs.org/
// 修改registry地址为本地NPM私库
npm set registry http://localhost:4873
// 此时在一个新文件夹下 执行 npm install jQuery 就可以看到下载的地址

也可以设置http://0.0.0.0:4873
4. 配置相关

storage: ./storage
plugins: ./plugins
web:
  title: Verdaccio
auth:
  htpasswd:
    file: ./htpasswd
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
server:
  keepAliveTimeout: 60
middlewares:
  audit:
    enabled: true
logs:
    { type: stdout, format: pretty, level: http }

storage 已发布的包的存储位置,默认存储在 ~/.config/Verdaccio/ 文件夹下

plugins 插件所在的目录

web 界面相关的配置

auth 用户相关,例如注册、鉴权插件(默认使用的是 htpasswd

uplinks 用于提供对外部包的访问,例如访问 npm、cnpm 对应的源

packages 用于配置发布包、删除包、查看包的权限

server 私有库服务端相关的配置

middlewares 中间件相关配置,默认会引入 auit 中间件,来支持 npm audit 命令

logs 终端输出的信息的配置

  1. 权限管控

    1. 包管控

      packages:
        '@*/*':
          access: $all
          publish: $authenticated
          unpublish: $authenticated
          proxy: npmjs
        '**':
          access: $all
          publish: $authenticated
          unpublish: $authenticated
          proxy: npmjs
      

      这里的 key 代表对应权限需要匹配的包名,例如对于第一个,如果我们发布的包名是这样的 @wjc/test 就会命中。每个规则中对应 4 个参数。其中 proxy 代表如果在私有 npm 库找不到,则会代理到 npmjs(对应 unlinks 中的 npmjshttps://registry.npmjs.org/)。而剩下的 3 个参数,都是用来设置包相关的权限,它有三个可选值 $all(所有人)、$anonymous(未注册用户)、$authenticated(注册用户)。那么,下面我们分别看一下这 3 个参数的含义:

      • access 控制包的访问权限
      • publish 控制包的发布权限
      • unpublish 控制包的删除权限
    2. 账户管控

      因为此时注册用户是没有限制的,也就是说如果你的私有 npm 库部署在外网环境的话,任何人都可以通过 npm adduser 命令注册用户。

      显然,这是不允许出现的情况,所以这里我们需要设置 authmax_users-1,它代表的是禁用注册用户:

      auth:
      	htpasswd
        	max_users: -1
      
  2. 发布包到NPM私库

    1. 确保在npm官网注册过账号密码

      请在npm官网注册一个账号,记住用户、密码和邮箱,后续上传包需要用到

      地址 https://www.npmjs.com

    2. 将用户名密码添加到verdaccio

      npm who am i
      // 查看自己登陆情况
      npm adduser --registry http://localhost:4873
      // 新增用户 
      // 依次输入官网注册的用户、密码和邮箱即可
      // 注册登录成功后,可以看到verdaccio的配置文件夹 多了一个文件:htpasswd
      
    3. 上传包

      新建文件夹demo,进到文件夹下执行命令:创建本地化仓库

      npm init -y
      

      然后再创建入口文件 index.js

      文件内随便写个 console.log(‘我最帅!!!’)

      然后发布

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

      查看已上传的包

      注意 发布可能会 报错 vision

      在需要上传的包路径下,先执行版本号+1命令:

      有时候出现上图的版本错误,可能是因为包的文件名被占用了,是公有库的文件名比如vue啊这些自己的包都不能叫这个名字。

       npm version patch -m "Version %s - v0.0.1"
      

      然后就可以push了

  3. 下载包

    ​ 此时需要在一个新的文件夹下载包

    npm install demo
    

    ​ 也可以 下载 其他的包 比如 lodash

    npm install lodash
    

    ​ 此时你可以在verdaccio中看到你的下载

  4. 切换成内网

    配置文件路径在启动verdaccio的控制台可以看到:

    // pc 
    C:\Users\xxx\AppData\Roaming\verdaccio\config.yaml
    // mac 
    /Users/guoke/.config/verdaccio/config.yaml
    

    打开文件,末尾追加:
    listen: 0.0.0.0:4873
    然后重启verdaccio服务即可。

    此时 需要我们小伙伴一起设置这个

    npm set registry http://你的IP:4873
    

    就可以愉快的玩耍了

    如果小伙伴需要发布包需要新增账户和登录

  5. 取消发布

    ​ 上传搞错了,又不想追加版本,可以删除上一个版本的包,命令如下:

    npm unpublish demo@0.0.1
    
  6. 离线同步包

    verdaccio 配置中有一个store 会指定存放位置 文件夹名称为 storage

    此文件夹 是缓存之前已下载的的包 直接拷贝复制就可以完成离线同步

    注意 离线情况下会特别慢 因为这里会请求uplink的服务资源 需要修改配置

  7. 遗留问题

    1. 用户权限管控
    2. Nexus 集成
    3. 如何线程守护 如 pm2
    4. docker 一键部署
    5. 本地存储单个包 以及包的依赖问题 node-sass
    6. 发布通知和订阅
    7. 已缓存包的列表展示(官方未更新 可能会在6.0更新)
      请添加图片描述
      12. 项目同步到内网出现的问题
      相同的package.json 在内网无法跑起来 各种文件缺失的问题和版本不对情况, 此时可能是你在外网 npm install 的时候走了缓存 、此时你可以把package.json 拿到一个空的文件夹下 进行 npm install ,然后再把你的storge 包同步一次就可以了(这个问题折磨了我一天)

参考文献

安装 https://blog.csdn.net/Beam007/article/details/118694543

离线 https://blog.csdn.net/cui_yuanqing/article/details/105379118

官网 https://verdaccio.org/zh-CN/docs/what-is-verdaccio

nexus https://blog.csdn.net/qq_35577655/article/details/118963859

其他 https://juejin.cn/post/6932264833312096270#heading-3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗小黑点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值