背景
- 公司内部开发的私有包,统一管理,方便开发和使用,尤其版本管理需要统一;
- 安全性,既要保证组件的使用方便也要保证组件的私有性。
介绍
为什么选择 verdaccio? 免费!
市面上付费的软件大概有下面几种:
sinopia 搭建十分简单友好,不过这玩意儿已经停止维护了,最近的更新在几年前,但有一群人出了 sinopia 的一个分支,起了个名字叫 verdaccio,这个就是这次主要推荐的方案,这个库一直在积极维护中,github start 13000+,看来还是比较靠谱的,而且国内外各种资料参考下来,这个方案也是受到极力推荐的。
安装
详细的安装教程。如果是本地安装, 可以使用 npm、yarn 或 pnpm 全局安装即可。
1 2 3 4 5
| npm install --g verdaccio 或 yarn global add verdaccio 或 pnpm install -g verdaccio
|
运行
在命令行执行下方命令
启动后会输出配置文件地址和浏览器访问地址
1 2
| warn --- config file - xxx/xxx/config.yaml warn --- http address - http://localhost:4873/ - verdaccio/5.14.0
|
使用
nrm
nrm 是一个 NPM 源管理器,可以使用 nrm 在不同的源切换。
1 2 3 4 5 6 7
| npm ---------- https://registry.npmjs.org/ yarn --------- https://registry.yarnpkg.com/ tencent ------ https://mirrors.cloud.tencent.com/npm/ cnpm --------- https://r.cnpmjs.org/ taobao ------- https://registry.npmmirror.com/ npmMirror ---- https://skimdb.npmjs.com/registry/ * fc ----------- http://localhost:4873/
|
1 2 3
| nrm add registry_name registry_url #添加源,registry_name为源的名称,registry_url为源的地址 nrm del registry_name #删除源
|
登录私有源
发布包
在项目的根目录下执行 npm publish 就可以将包发布到私有源
权限管理
权限配置
一般团队或者公司的私有项目,会采用不同的权限控制,配置文件的 packages 是配置包的权限的
- 匹配包名
- ‘@/‘ 表示带有@/的作用域包
- ** 表示其他的所有包
- 可以配置自己的包比如:’private-‘, ‘my-‘等等
- 操作权限
- access 表示哪一类用户可以对匹配的项目进行安装(install)
- publish 表示哪一类用户可以对匹配的项目进行发布(publish)
- proxy 表示如果库中没有此包,此能过上面配置的 npmjs 去获取
- 用户权限:
- $all 表示所有人都可以执行对应的操作
- $authenticated 表示只有通过验证的人可以执行对应操作
- $anonymous 表示只有匿名者可以进行对应操作(通常无用)
- 这里可以写已经注册的用户名,做到精细化控制
实际配置场景
公司里有两个前端团队 teamA 和 teamB,私有源上的所有包都可以安装,但是每个团队只能发布或移除自己团队的包。则可以使用以下配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| packages: '@teamA/*': access: $all publish: teamA-user1 teamA-user2 teamA-user3 unpublish: teamA-user1 teamA-user2 teamA-user3 proxy: npmjs '@teamB/*': access: $all publish: teamB-user1 teamB-user2 teamB-user3 unpublish: teamB-user1 teamB-user2 teamB-user3 proxy: npmjs '**': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs
|
设置好 packages 后,我们还得更改 auth 的值,因为此时注册用户是没有限制的,也就是说如果你的私有 npm 库部署在外网环境的话,任何人都可以通过 npm adduser 命令注册用户。
显然,这是不允许出现的情况,所以这里我们需要设置 auth 的 max_users 为 -1,它代表的是禁用注册用户:
如果需要添加用户这里介绍两种方法:
- 可以通过安装 htpasswd-for-sinopia 来添加账号
1 2
| npm install htpasswd-for-sinopia -g #全局安装htpasswd-for-sinopia sinopia-adduser # 在 htpasswd 目录下执行
|