最近因为公司项目需要搭建一个私服 npm,安排我来研究,这两天也踩了不少坑,于是记录下踩坑经历,避免小伙伴们踩坑。
私服 npm 能做什么?
如果一个公司的项目非常多,而且有很多的方法、组件、api都是可以共用的。如果没有私服 npm,那么我们将不断的复制粘贴这些代码到各个项目中,一旦其中的某一处需要修改,那么所有的项目都需要改一遍。
更好地维护这些公共代码,比较好的处理方式是将这些公共代码封装成一个个 npm 包,但是我们又不能将公司的代码发布到外网的 npm 中,所以私服 npm 就能够很好地帮助我们解决这一问题。
安装 Nexus
$ docker run -d --name nexus3 --restart=always \
-p 8081:8081 \
-p 8082:8082 \
-v nexus-data:/nexus-data \
sonatype/nexus3
Unable to find image 'sonatype/nexus3:latest' locally
latest: Pulling from sonatype/nexus3
c65691897a4d: Pull complete
641d7cc5cbc4: Pull complete
c508b13320cd: Pull complete
79e3bf9d3132: Pull complete
Digest: sha256:2c33632ccd8f8c5f9023a3d7f5f541e271833e402219f8c5a83a29d1721457ca
Status: Downloaded newer image for sonatype/nexus3:latest
f637e039214978f8aac41e621e51588bd8cd8438055498c4060fbaf87799e64f
$ docker exec -it f637 /bin/bash
bash-4.4$ vi /nexus-data/admin.password
其中 f637 为容器 id,需要根据启动 nexus 的容器 id 进行修改。
创建 npm 仓库
打开设置 -> repositories
页面,点击 Create repository
按钮。
先创建 npm(proxy)
仓库,即代理仓库
image.png
完成后点击底部 Creaete repository
完成创建。
创建 npm(hosted)
仓库,即私服仓库
image.png
输入仓库名即可点击底部 Creaete repository
完成创建。
创建 npm(group)
仓库,npm 组
为什么要使用 npm(group)
?
当我们从 npm(group)
这个仓库安装 npm 包时,首先会查看该仓库中是否存在,不存在时则会使用代理仓库到官方仓库进行下载。
创建 npm(group)
需要填写仓库名,然后将 npm(proxy)
和 proxy(hosted)
设置为成员即可,点击底部 Creaete repository
完成创建。
验证私服 npm
$ npm install vue --registry=http://localhost:8081/repository/npm-group/
npm ERR! code E401
npm ERR! 401 Unauthorized: vue@latest
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/admin/.npm/_logs/2019-12-24T08_33_14_088Z-debug.log
可以看到出现了 401 未授权的错误,因为我们的 npm 没有登录私服。
原有的 npm 是可以不登录进行安装 npm 包的,所以我们的私服也需要改成允许匿名访问的。
打开设置页面 Security -> Anonymous
,勾选 Allow anonymous users to access the server
即可,点击 save
保存。(网上的文章基本都跳过该步骤)
$ npm install vue --registry=http://localhost:8081/repository/npm-group/
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN npm-test@1.0.0 No description
npm WARN npm-test@1.0.0 No repository field.
+ vue@2.6.11
added 1 package from 1 contributor in 2.944s
可以看到这次就安装成功了。
使用 fnmp
首先将 fnpm 克隆到本地
$ git clone
根据私服 npm 地址修改 lib/config.js
中 fnpmRegistry
、fnpmHostedRegistry
对应的地址即可。
将 fnpm 发布到私服,参考下文使用 npm 命令发布包。
接下就可以使用 fnpm 了。
发布 npm 包到私服
首先登录私服 npm
$ npm login --registry=http://localhost:8081/repository/npm-hosted/
# or
# 如果安装了 fnpm
$ fnpm login
使用 publish
命令发布
$ npm publish --registry=http://localhost:8081/repository/npm-hosted/
# or
# 如果安装了 fnpm
$ fnpm publish
如果文中有说的不对的地方,欢迎留言指出改正,也欢迎留言讨论。
如果你喜欢我的文章,希望可以关注一下我的公众号【前端develop】
前端develop