npm 私有仓库搭建【verdaccio】

85 阅读5分钟

作为一个前端,我们经常要接触 npm,当我们的水平提上去之后有可能会去发布属于我们的 npm 包,或者在公司内网中发布私有包,希望这篇文章能够帮助到你。

准备一下环境

  • Node 环境,顺便帮你装好了 npm 了
  • docker 这个其实可以不用的,到后面再说

nrm

nrm 是一个镜像管理工具,能够帮助我们快捷切换各种源

查看源列表

nrm ls

image.png

默认会有一些源,例如淘宝源,可以加快 npm 包的下载

添加源

nrm add <origin_name> <origin_url>

image.png

删除源

当然有加就会有减

nrm del <origin_name>

image.png

切换源

nrm use <origin_name>

image.png

nrm 上常用的大概就这几个命令,关于搭建私有仓库还没有用到其他的命令。

verdaccio

接下来的包才是重点,它是搭建整个私有仓库的核心,它就是verdaccio,它的使用也非常的简单。

首先,直接将它安装到全局模块中:

npm i -g verdaccio

然后直接执行 verdaccio 就可以去到 http://localhost:4873 查看我们的私有仓库了。

image.png

没有啦,就这样,拜拜~

==========================================================

确实到上面已经结束了,但并没有完全结束,我们还需要登录 verdaccio 才能够发包

首先我们要切换到 verdaccio 对应的源上,那么要执行的命令大概是:

nrm add mynpm http:127.0.0.1:4837
nrm use mynpm

然后是登录账号,如果你没有当前源下的账号,那么就注册一个就好了

npm adduser

image.png

npm login
> username: xxx
> password: xxx
> email: xxx

image.png

登录好之后只需要发布就好了:

npm publish

当然,每次发布都要更新版本号,不然会失败的哦!

image.png

发布完在私有仓库中就会出现这样的包啦,然后就可以直接拿来用,跟普通的 npm 包一样,唯一不同的就是镜像源的地址。

image.png

2022.10.08 更新:两个 docker 之间是互不干扰的,就像两台独立的电脑,我们只能通过访问宿主机去间接访问另外的 docker 环境。即我们的通过上面的命令启动了 verdaccio 之后,我们在另外一个 docker 环境添加 npm 源的时候只能通过添加本机的ip去访问到 verdaccio,不然在执行 npm 相关的命令时会报错。即 nrm add mynpm http:xxx.xxx.x.x:4873

到这里又结束啦!

==========================================================

偶尔可能也许大概应该maybe...会遇到413 Payload Too Large - PUT http://xxx- request entity too large这样的情况,出现的情况多半是内容越来越多,我们包的内容超过了 10mb,这个是 verdaccio 默认的包的最大值,我们可以通过修改 C:\Users\xxxxxx\.config\verdaccio 下的 config.yml 中的 max_body_size 来解决这个问题,将它设置成 100mb,不够的话就 1000mb

image.png

到这里基本就结束了,但是,总有人会用到docker的吧,会有吧,有吧,吧...不会只有我一个人吧😭😭😭

我不是很会用docker,所有的都是网上零零碎碎看到的,有错的话评论区告诉我,我们一起进步。

首先我们要拉取最新的与构建 docker 镜像

docker pull verdaccio/verdaccio

当然也可以指定版本,就不介绍了,可以去官网查看。

下一步就是使用 docker 运行 verdaccio

docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio

但是这样执行了之后我们没有办法修改配置。

对于一直 docker 小白的我 来说,我找了半天如何修改 max_body_size,因为一直看不懂 docker 命令中 -v 的意思,在一次尝试中领悟到了用法。

docker run -it --rm --name verdaccio -v "C:\Users\xxx\config\verdaccio:/verdaccio/conf" -p 4873:4873 verdaccio/verdaccio

-v 其实分为两个部分,:C:\Users\xxx\config\verdaccio 为本地内容,:/verdaccio/conf 为容器内容,上面的指令就是使用本地的内容去替换容器内容。

这样我们就可以使用我们的本地配置去启动 docker 上的 verdaccio。

下面是 verdaccio 的本地内容:

image.png

docker

每次修改好文件,重启docker的时候,总会发现docker里面的环境被重置了,这是因为每次以 docker run 的方式进入 docker 之后,都会产生一个新的容器

docker肯定也是有解决方法的,那就是将容器保存为一个新的镜像:

docker commit <container_id> new_image_name(optional)

设置了 new_image_name 的情况下可以通过 new_image_name 代替 container_id

启动镜像的命令

docker start <new_image_name/container_id>

进入某个容器的命令

docker exec -it <new_image_name/container_id> /bin/bash 进入镜像

到这里就先告一段落吧,之后有关的内容会直接往这里更新,就不开新篇了(除非太长了)。

文章略显杂乱,如有错误及补充,希望诸位,不吝赐教,畅所欲言。

补充

  • 2022.10.08 docker搭建了lnmp环境后,如果需要访问安装在宿主机上的数据库或中间件,是不能直接使用127.0.0.1这个ip的,这个ip在容器中指向容器自己,那么应该怎么去访问宿主机呢:例如你的docker环境的虚拟IP是192.168.99.100,那么宿主机同样会托管一个和192.168.99.100同网段的虚拟IP,并且会是主IP:192.168.99.1,那么就简单了,在容器中访问192.168.99.1这个地址就等于访问宿主机,问题解决注意,通过192.168.99.1访问宿主机,等于换了一个ip,如果数据库或中间件限制了本机访问或者做了ip段限制,要记得添加192.168.99.1到白名单。介绍docker容器访问宿主机的服务端口 (huaweicloud.com)