私有npm仓库

5,813 阅读4分钟

私有npm仓库的优点

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

 2.安全,私有包托管在公司内部服务器中,外部无法访问 

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

 4.管理,对于发布和下载npm包可以配置权限管理

搭建方法:使用verdaccio

Verdaccio 是一个简单的零配置的node.js开发的轻量私有的npm代理仓库。github: github.com/verdaccio/v… 文档:verdaccio.org/docs/zh-CN/…

1. 安装

npm install –global verdaccio

2. 运行

verdaccio

3. 修改配置文件

 找到运行显示的xxx/verdaccio/config.yaml文件 

参考修改如下(重点底部新增监听端口):

  1. #设置NPM包的存放目录
  2. storage: ./storage
  3. #配置WEB UI界面
  4. web :
  5. title : ‘搭建私有NPM’
  6. #logo : logo.png
  7. #设置用户验证的文件。
  8. auth:
  9. htpasswd:
  10. file: ./htpasswd
  11. max_users: 1000 #默认为1000,改为-1,禁止注册
  12. #设置其它的npm注册源(registry)
  13. uplinks:
  14. npmjs:
  15. url: https://registry.npmjs.org/
  16. #配置权限管理
  17. packages:
  18. ‘@/’:
  19. #表示哪一类用户可以对匹配的项目进行安装 【$all 表示所有人都可以执行对应的操作,$authenticated 表示只有通过验证的人可以执行对应操作,$anonymous 表示只有匿名者可以进行对应操作(通常无用)】
  20. access: $all
  21. #表示哪一类用户可以对匹配的项目进行发布
  22. publish: $authenticated
  23. ‘*’:
  24. #表示哪一类用户可以对匹配的项目进行安装
  25. access: $all
  26. #表示哪一类用户可以对匹配的项目进行发布
  27. publish: $authenticated
  28. # 如果一个npm包不存在,它会去询问设置的代理。
  29. proxy: npmjs
  30. #日志输出设置
  31. logs:
  32. -{type: stdout, format: pretty, level: http}
  33. #-{type: file, path: verdaccio.log, level: info}
  34. #修改监听的端口
  35. listen: 0.0.0.0:4873

4. 启动 verdaccio

本地测试直接打开 http://localhost:4873/
公司部署的IP地址: xxxx

内网环境使用NPM私服

当前npm 服务指向verdaccio

npm set registry http://ip:4873

注册用户

  1. npm adduser –registry http://ip:4873
  2. 按照提示输入userName 和 password,email
  3. 输入后就注册完成

查看当前用户,是否是注册用户

npm whoami

登录账号

npm login // npm login和npm adduser命令是等效的,如果是第一次登陆,且用户名不存在冲突,那么登陆信息会在进行加密处理后,存入和config.yaml文件同级的htpasswd文件中。

发布

npm publish 或者 npm publish --registry http://ip:4873 //项目中发布包 发布后可以在storage文件夹下看到包

项目package.json配置

  "publishConfig": {    
     "registry": "http://ip:4873/" 
   }, 
  "private": true, //手动添加, 防止将私有模块上传到公网

建议使用nrm管理源

安装以及常用方法

npm i nrm -g (全局安装nrm)
nrm ls (用来查看npm源)
nrm use 源名称 (设置当前npm源)
nrm add 名称 地址 (创建新的源)
nrm del 名称 (删除源)

Git仓库作为私有npm仓库

对于公共模块, 最好是放在同一个 group 下, 例如放在 test 这个 group 下. 那么以后所有公共模块的 git 地址就可以统一为: git.xxx.com/{group}/{pr…

  • 在 GitLab 上新建一个 project

  • 将项目 clone 下来

  • 添加 package.json 配置, 注意限定 @scope 

       比如: npm init --scope=test

  • 然后提交 push 代码

  • 配置下项目的 dependencies

  •   在项目的 package.json 中添加依赖, 
      例如: 
      依赖 @group/test 这个私有模块"@group/test": "git+http://git.xxx.com/{group}/{project}.git"
      或npm i -D git+ssh://git@git.xxx.com/{group}/{project}.git
      或npm i -D git+https://git@git.xxx.com/{group}/{project}.git
      或npm i -D git+https://[username]:[pwd]@git.xxx.com/{group}/{project}.git
    
  • 更新私有模块

    如果私有模块的版本更新了, 由于 npm+git 方案的弊端, 我们使用 npm update 是无法更新私有模块的 只能通过 npm install @group/test 这样的方式来重新安装一次私有模块, 才能获取到最新版本的私有模块.

优缺点

优点:不用启动服务
缺点:不能用npm update 来更新依赖
解决方式:每次提交更新包的时候打上tag标记

  • git taggit tag -a v1.0.1 -m 'version1.0.1' //附注标记
  • git show v1.0.1
  • git push origin v1.0.1//手动更新该依赖在pacage.json的tag, 再npm update"@group/test": "git+https://git@git.xxx.com/{group}/{project}.git#v1.0.1"

注意:

package.json#name 必须限定 @scope@scope 一般为 GitLab group 的名字,

例如 @companyfe,

那么 name 为: @companyfe/hello-private

package.json#private 设置为 true

防止你一不小心将私有模块 publish 上去就麻烦了

使用pm2守护verdaccio进程

PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。可以用来托管verdaccio进程,保证其永久存活。

  • npm i -g pm2
  • pm2 -h
  • pm2 start verdaccio