npm私有库服务
简介
公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件、模块和项目。对于前端,最熟悉的莫过于npm,bower等;但是bower的市场兼容性明显没有npm强壮,加之commonjs规范的日益成熟。npm应该是前端包管理的不二选择。
公司对于搭建本地私有npm库有如下要求:
- 私有包托管在内部服务器中
- 项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包
- 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库
- 服务器硬盘有限,希望只缓存下载过的包,而不是全部同步。
- 对于下载,发布npm包有对应的权限管理,安装方便,配置简单,依赖少。
安装私有包流程
服务搭建
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
-
为避免客户端创建虚假用户、或失误创建用户,会关闭注册用户功能max_users: -1
,采用服务端提供用户账户配置file: ./htpasswd
的方式新增用户。
已经为verdaccio编写自定义验证插件,使用自己的账户系统的用户名和密码进行登录验证verdaccio-delegated-auth - 公司内部发布包到私有服务需要加上前缀
@company/${app}
,例如@company/lodash
。前缀包@company/*
必须经过账户验证后才能正常执行安装或发布。(company
指公司名称) - 发布内部私有包必须有项目自述README,内容必须包含:
- 基本描述
- 使用方式
- 源码地址
客户端使用
- 安装
nrm
新增私有服务代理,使用自己的账户系统账号登录使用。 - 浏览器访问私有服务Socket,查看所有内部私有包。
$ nrm add company http://126.*.*.99:4873/
$ nrm use company
$ npm login
安全
网关
更多
Docker + S3