npm私有库服务搭建及规范定制

2018-12-18  本文已影响0人  Leiyansen

npm私有库服务


简介

公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件、模块和项目。对于前端,最熟悉的莫过于npm,bower等;但是bower的市场兼容性明显没有npm强壮,加之commonjs规范的日益成熟。npm应该是前端包管理的不二选择。

公司对于搭建本地私有npm库有如下要求:

  1. 私有包托管在内部服务器中
  2. 项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包
  3. 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库
  4. 服务器硬盘有限,希望只缓存下载过的包,而不是全部同步。
  5. 对于下载,发布npm包有对应的权限管理,安装方便,配置简单,依赖少。

安装私有包流程

image

服务搭建

node + npm + verdaccio + pm2 + nrm

Sinopia Verdaccio是一个零配置的私有的带缓存功能的npm包管理工具

PS: Sinopia多年未更新,Verdaccio是基于Sinopia重构的,注入了更多活力

# config
$ /home/ubuntu/.config/verdaccio/config.yaml
# password
$ /home/ubuntu/web_npm/verdaccio/htpasswd
# storage
$ /home/ubuntu/web_npm/verdaccio/storage

pm2 托管Sinopia进程可以保证进程永远存活
nrm 便于查看和切换当前使用的registry
verdaccio-delegated-auth 是为了让服务支持自定义验证的插件


标准定制

# Sinopia config.yaml
# path to a directory with all packages
storage: /home/ubuntu/web_npm/verdaccio/storage
auth:
  # htpasswd:
    # file: ./htpasswd
    # max_users: -1
    # mix_users: 1000
 delegated-auth:
    url: https://your-account-server/
    user_key: name # username field, default: username
    pwd_key: password # password field, default: password

# a list of other known repositories we can talk to
uplinks:
  npmjs:
    url: http://registry.npm.taobao.org/

packages:
  '@company/*':
    # scoped packages
    access: $authenticated
    publish: $authenticated
  '*':
    # keywords: "$all", "$anonymous", "$authenticated"
    access: $all
    publish: $all
    proxy: npmjs

# log settings
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: sinopia.log, level: info}
listen: 0.0.0.0:4873
  1. 为避免客户端创建虚假用户、或失误创建用户,会关闭注册用户功能max_users: -1,采用服务端提供用户账户配置file: ./htpasswd的方式新增用户。
    已经为verdaccio编写自定义验证插件,使用自己的账户系统的用户名和密码进行登录验证verdaccio-delegated-auth
  2. 公司内部发布包到私有服务需要加上前缀@company/${app},例如@company/lodash。前缀包@company/*必须经过账户验证后才能正常执行安装或发布。(company指公司名称)
  3. 发布内部私有包必须有项目自述README,内容必须包含:
    • 基本描述
    • 使用方式
    • 源码地址

客户端使用

  1. 安装nrm新增私有服务代理,使用自己的账户系统账号登录使用。
  2. 浏览器访问私有服务Socket,查看所有内部私有包。
$ nrm add company http://126.*.*.99:4873/
$ nrm use company
$ npm login

安全

网关

更多

Docker + S3

上一篇下一篇

猜你喜欢

热点阅读