首页 前端知识 【10分钟,手把手教你搭建一个npm私有库】

【10分钟,手把手教你搭建一个npm私有库】

2024-06-24 23:06:16 前端知识 前端哥 33 190 我要收藏

开始之前

这里我们选取nexus作为npm私有仓库的服务
nexus功能丰富,可以提供代理仓库、宿主仓库,除了做npm仓库,还可以做maven,pypi等仓库。

nexus - 概念
hosted:本地仓库,通常用来存放自己编写的包,我们自己发的包放这里。
proxy:代理仓库,一般用于代理远程第三方的公共仓库。
group:用于聚合管理,如果内部包括了 hosted 和 proxy。首先会从 hosted 取,若无则从 proxy 取并缓存,下次则会从缓存取。

部署

1,启动nexus服务

部署nexus,我们选取docker 在本地或云服务器上部署。

docker run -d -p 8081:8081 --name nexus -v ${your_local_data_path}/:/nexus-data sonatype/nexus3

${your_local_data_path} 换成本地的路径,比如:/Users/xx/software/nexus/data。

2,创建仓库

服务启动后访问 http://localhost:8081/#admin/repository/repositories 点击创建,然后选取npm(hosted),进行创建。
创建仓库
npm(hosted)

填写仓库信息

3,设置权限

3.1 创建角色

按下图依次填下,

创建角色

填写信息

这里我们先把权限选大一点,所有npm库的读写权限,当然你也可以根据自身需求,限制读写权限,限制特定npm库。
设置角色权限

3.2 创建用户

角色创建好后,则可以创建一个用户,然后赋予用户角色。
创建用户

按图所示依次填写,并赋予角色。

填用户信息并设置角色

3.3 设置仓库npm权限

这里加一下关于npm的权限 ,也很简单,根据提示 把npm Bearer Token Realm 加到active即可。
nexus官方原文:This authentication method requires the npm Bearer Token Realm. Simply add the realm to the active realms in the Realms section of the Security menu from the Administration menu to activate it as documented in Realms. (refs: https://help.sonatype.com/en/npm-security.html)
可拖拽到active

使用

发包

我们发到这个仓库里

这里我们提前准备一个packname为@company-a/common的包(文末有对应代码 )。
发包很简单,命令如下yarn publish --registry=http://127.0.0.1:8081/repository/my-npm-repo/ --new-version 1.0.0 common,然后输入刚刚创建的用户账号和密码。

指令

然后进入仓库查看,嗒哒!🎉 新包上传上来了 。

引包

最后我们在试下安装下这个新包。

假设我们有个业务应用目录为app1,进入到app1目录下,修改.npmrc文件,要把@company-a的registry地址改为搭建的仓库地址 http://localhost:8081/repository/my-npm-repo/;

cd app1 && vim .npmrc

registry=https://registry.npmjs.org
@company-a:registry=http://localhost:8081/repository/my-npm-repo/

然后执行 yarn add @company-a/common@1.0.3,如下图安装成功!

13.png


至此,搭建nexus作为npm私有库服务器,然后发包,引包的全流程演示完毕。

快速搭建一个属于团队或者自己的私有库服务,就是这么简单。祝大家都可以敏捷开发,一切顺利!

示例源码参考

https://github.com/Wunan777/my_node_module/tree/main/nexus_package_demo

标签: npm, nexus, 私有库

转载请注明出处或者链接地址:https://www.qianduange.cn//article/13509.html
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!