前端于我
工程化 / 私库 / npm

使用nexus配置npm私库

最近刚入职一个刚成立的公司,团队内“百废待兴”。所以要致富,先修路。想要让前端起飞,那么一个私库是必不可少的。

刚好我最近对前端工程化相关的内容比较感兴趣。自己也学习了一下如何使用nexus搭建私库。关于这方面的资料其实网上不少,不过之前没有将目光投向这些地方,所以自己并不是很了解。

使用docker起一个nexus服务

首先得确保你的机器上安装好了docker,然后打开终端跑一下下面的命令(注意把目录映射改一下):

docker run -d --name nexus3 --restart=always -p 8081:8081 -p 5000:5000 -v C:\private_npm_lib:/nexus-data sonatype/nexus3

容器跑起来之后打开http://127.0.0.1:8081/#browse/welcome, 此时可以看到nexus的界面就说明服务启动成功了。

图片

nexus上配置npm私库

首先我们点击上面界面中右上角的Sign in,然后输入账号: admin, 密码:xxx忘记了xxx后面补上

建议换一个私密一点的,好记的密码。

登录进去之后,我们点击左上角的齿轮icon -> Repository -> Repositories:

图片

然后点击Create repository,先选择新建一个npm hosted

npm-hosted

填写name和把deployment policy悬赏Allow redeploy,这是控制是否允许部署和更新。

npm-hosted

点击提交,然后回到列表我们再创建一个npm(proxy):

npm-proxy

这里我们填上name和remote storage就好了。注意remote storage是当你的私库没有对应的依赖时去哪里安装的地址,我们一般填它的实例,也就是npm的地址就好了,如果你嫌npm太慢也可以选择填淘宝的镜像源https://registry.npm.taobao.org

填完点提交就可以了。

再次回到列表我们创建一个npm(group):

npm-group

这里把name填上,然后在下面把刚刚新建的hosted和proxy都选到右边,然后提交就好了

然后就ok了,我们的私库就建好了。非常的简单

使用

怎么使用私库其实也非常的简单,回到我们的仓库列表,如果你是通过上面的命令在本机上开启的服务的话,那么请打开http://127.0.0.1:8081/#admin/repository/repositories

找到我们刚刚新建的npm3-group,点击它右边的copy按钮,将仓库地址copy下来。

只拉取依赖

如果平时不发布私库依赖,仅拉取的话,只需要在项目根目录下增加.npmrc文件,并添加以下内容即可:

registry = http://127.0.0.1:8081/repository/npm3-group/

注意将上面的私库地址换成你自己的私库地址

全局安装

然后我们可以通过cnpm去全局配置另一个npm命令, 所以我们得先安装cnpm。如何安装cnpm就跳过了,百度一下你就知道。

安装好之后打开终端,输入以下内容回车:

alias npm3='cnpm --registry=http://127.0.0.1:8081/repository/npm3-group/ --registryweb=http://127.0.0.1:8081/service/rest/repository/browse/npm3-hosted/ --userconfig=$HOME/.npm3rc'

然后你就可以像使用npm一样使用npm3了。但是,凡事都得有个但是,window下比较坑的是,alias命令会只在当前的终端起效,如果重开一个终端,或者电脑重启了,那这个命令就没了。

有两个解决方案:

  1. 编辑配置git bash的bash.bashrc文件,添加alias命令。它会在每次git bash启动时执行

这个bash.bashrc文件一般在git安装目录下的etc目录下,打开它然后在文件最后面添加:

alias npm3='cnpm --registry=http://127.0.0.1:8081/repository/npm3-group/ --registryweb=http://127.0.0.1:8081/service/rest/repository/browse/npm3-hosted/ --userconfig=$HOME/.npm3rc'
  1. 使用nrm进行npm的源管理

nrm是一个npm的源管理工具,它可以比较方便的给npm切换各种源。首先我们需要全局安装nrm:

npm install -g nrm

然后我们添加一个源(注意nrm的1.2.1版本在window中只能在git bash运行,否则会报错,至少在我的机器上是这样):

nrm add npm3 http://127.0.0.1:8081/repository/npm3-group/ http://127.0.0.1:8081/service/rest/repository/browse/npm3-hosted/

然后我们就可以用nrm切换源了:

nrm use npm3

使用方法跟配置命令别名不一样,我们直接使用npm进行依赖安装就好了,此时它的源已经指向了我们的私库.

当然还有另一个方法是我们可以直接配置npm的源地址,使用命令 npm config set registry 源地址进行源切换,但是不推荐这样做,因为如果平时是要切换着用的话会很麻烦。

发布包

到这里,我们已经部署好了私库,并且已经可以拉取私库里的依赖包进行开发了。但是还没有做到可以上传包,接下来就看看如何开发一个包并上传。

首先我们新建一个项目npm init,然后需要在package.json中增加以下内容:

{
  ...
  "publishConfig": {
    "registry": "http://127.0.0.1:8081/repository/npm3-hosted/"
  }
}

然后登录(注意这里如果你是使用nrm换源的,将npm3换成npm就好)

npm3 adduser -registry http://127.0.0.1:8081/repository/npm3-host/

输入账号密码(可以在nexus注册一个)

注意这里应该会报一个错误: Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"

这里是没有配置realm的规则,打开nexus上的Security -> Realms,将npm Bearer Token Realm选上。

realm

然后npm3 publish就可以了,到这里应该就成功将你的npm包发布到你的私库了.

npm-test

可以看到我本地的尝试已经正常上传包了。🐂的不行。

拥有私库是每一个有追求的公司的基本条件,只有在拥有私库的情况下才能更好的做沉淀,做工程化,提高开发效率。

The end.

发表于: 2021-08-12