首页 文章详情

npm私服搭建

HappyVincent | 3285 2021-11-03 16:32 0 0 0
UniSMS (合一短信)

如何搭建 npm 私服?

npm私服搭建工具不多,主要有三个:Verdaccio、sinopia、nexus。


Verdaccio

号称零配置的私服,直接用 node 启动就行,还提供 docker 版本。体验下来,我觉得好处就是安装特别省事,无需太关注复杂的技术,也可以不用太配置,还带有个简洁的 UI 页面。单纯是 npm 私服的话,我认为用它非常适合。而且体验和 npm 官网非常类似,支持的 npm 语法也非常好。


sinopia

一样号称零配置的私服,整体和 Verdaccio 差不多。

功能比 Verdaccio 更简单,也具有简洁的 UI 页面。简单体验了下,大体也和 Verdaccio 差不多。感觉就是 Verdaccio 的精简版吧。


Nexus

非常强大,各个公司基本上用的都是它!因为它可以同时处理 maven npm 等私有仓库。所以为了省事,很多公司就不会单独再部署其他私服了。





下面是Nexus示例:

官网下载好包后,解压缩就可以了,以 MacOS为例:

首先确保服务器上有 java 环境,进入下载后Nexus目录后,执行脚本启动:

./nexus-3.28.0-01/bin/nexus start

启动后访问地址:http://localhost:8081/

此时如果你点击登录按钮,会提示:

Your admin user password is located in/Users/xxx/Applications/nexus-3.28.0-01-mac/sonatype-work/nexus3/admin.password on the server.

他告诉了密码的位置,可以到机器上查询下,之后使用 admin 账号登录。

点击顶部的设置按钮,左侧选择 Repository - Repositories,

之后选择 Create repository,可以看到有 npm(proxy) npm(hosted) npm(group)。

a51b800eddfb5539e3e89f6cddc5036b.webp

  • npm(proxy)就是代理仓库,可以缓存已下载的包,后续就不用下载了。它只能实现代理的功能,不能实现私有包的托管。

  • npm(hosted)就是存储私有包的仓库,可以允许提交包,但不能实现代理功能。

  • npm(group)就是将以上两种仓库合并下,一个地址就能实现代理和私有包托管,免去来回切换地址的麻烦。


建立 npm(proxy)

fcd0e26fec2ac8104991b39b80247f39.webp

Name随意,就是区分。

Remote storage是远程代理地址,官方或者淘宝源https://registry.npmjs.org/,其他都不用管,默认就好。

返回后,可以看到多了当前新增记录,后面有一个URL copy的按钮。复制后就获得了地址 http://localhost:8081/repository/npm-proxy/。

通过此代理 url,可以进行访问代理。比如进行安装包,是完全可行的:

npm install xxx --registry http://localhost:8081/repository/npm-proxy/


建立 npm(hosted)

a8601c7293e12579a243855897e87c2b.webp

Name 随意,就是区分,其他都不用管,默认就好。

返回后,可以看到多了一条npm-hosted记录。

复制地址http://localhost:8081/repository/npm-hosted/。

这个地址不能用于代理,比如 npmi@yukapril.com,会提示找不到对应包。

此时你不能通过npm adduser来增加账号,需要通过nexus来增加用户。

首先要增加一个npm角色组,我分配了所有npm的权限,参见如下:

e701fb1c1fe9d8733ca8c7a32246e121.webp

然后,新增一个账号,参见如下:

b683847b4718db75112d0697409a8b56.webp

最后,还要修改Realms,把npm Bearer Token Realm加到右侧激活区:

2e25b602eec98c69324e30e382aa78d7.webp处理Realms,否则后续操作可能会遇到如下错误:

Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository > Manager"


建立好账号后,使用以下命令来进行登录:
npm login --registry http://localhost:8081/repository/npm-hosted/
之后可以发布包了:
npm publish --registry http://localhost:8081/repository/npm-hosted/

这个仓库地址只能发布私有包,不能下载其他的公有包。


建立 npm(group)

ae973cd58567a68cffaa59bfdd9f6896.webp

Name 随意,就是区分,

Member repositories,需要选择已经建立好的 2 个 npm 仓库,

Blob store,表示缓存位置,可以自己在建立一个存储区域,这里用默认的,

其他都不用管,默认就好。

完成后,获得新的地址:http://localhost:8081/repository/npm-group/。

使用此地址可以下载公共包,以及发布私有包。

但是发布私有包时候,会报错,没交钱的错:

npm ERR! code E403npm ERR! 403 403 Forbidden - PUT http://localhost:8081/repository/npm-group/test          - Deploying to groups is a PRO-licensed feature.            See https://links.sonatype.com/product-nexus-repositorynpm ERR! 403 In most cases, you or one of your dependencies are requestingnpm ERR! 403 a package version that is forbidden by your security policy.


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter