首页 前端知识 超详细NPM代理仓库Nexus 搭建、配置及验证过程

超详细NPM代理仓库Nexus 搭建、配置及验证过程

2024-05-30 10:05:24 前端知识 前端哥 461 165 我要收藏

一. nexus 搭建

docker run -d -uroot --name nexus3 --restart=always -p 8081:8081 -v /data/nexus-data/blobs:/nexus-data/blobs   -v /etc/localtime:/etc/localtime sonatype/nexus3

注:提前创建/data/nexus-data 目录,检查端口是否被占用

2. 访问

192.168.110.112::8081

注: 第一次登陆会提示修改密码

image.png

3. 修改密码

进入容器: docker exec -it nexus3 sh 
查看默认密码:cat /nexus-data/admin.password 
web页面修改密码即可

4. 访问成功如图

二 . 配置nexus仓库

1. 使用admin 账户登录neuxs平台 单击Repositories

2. 创建nexus仓库

2. 仓库概念简单说明

npm(proxy): 可配置代理的仓库,当此仓库没有相应包时 会从配置的第三方仓库拉取 并缓存到本地proxy仓库

npm(hosted):开发自己的包推送到此仓库,需登录才能推送

npm(group): 可配置包含上面两种仓库,这样用户只需要配置npm(group) 这个地址即可 ,避免配置npm(proxy) 和npm(hosted) 两个地址

注:下面是创建后生成的地址

image.png

3. 创建并配置仓库

3.1 配置npm(proxy) 仓库

1. name:npm_proxy , nexus 会将 这个name当做仓库地址的一部分 如图2

2. 配置淘宝源为远程仓库地址 https://registry.npm.taobao.org 当proxy仓库没有包时 会去淘宝拉取并缓存本地

3.2 配置npm(hosted)仓库

1. 填写 name名字

2. 可选 --> Deployment Policy : 建议选择 Allow redploy 这个选项,因为实际项目中开发会经常推送同一个包上去,如果选择Disable redeploy 则在仓库有 xx 文件时

不会在允许你推送第二次,有报错通知如图2

3.3 配置npm(group)仓库

1. 将上面创建好的2个组加入到右边 即可

3.4 配置后如图

注: copy 地方可查看 仓库地址

四. 测试nexus 仓库

1. 在使用nexus前 仓库没有任何数据

2. 自定义项目构建 ,寻找自己的jenkins或其他项目进行构建

2.1 构建时指定nexus 镜像仓库

npm config set registry http://192.168.110.112:8081/repository/npm_all/ #配置使用nexus仓库代理 
npm -loglevel info install # -loglevel info 能打印出拉取包的地址 用于测试构建是否使用nexus代理 npm run build:prod

3. 通过日志可以看出 ,node构建已经走了配置的nexus代理

4. 查看nexus仓库,查看是否缓存的拉取的响应的node包

注: 可以看出 nexus 已经将流水线构建需要的包 拉倒了本地并缓存

五: node 项目使用vue时 会安装依赖node-sass 而node-saas 有需要去github上下载依赖包, 当网络不稳定时,就会出现下载超时,甚至是失败的情况,最显著现象就是流水线构建极慢,开发抱怨颇深,我们可以建node-saa 类型的包也做个nexus代理

注: VUE工程使用了node-sass或其它命令工具,仅仅只对淘宝 NPM 镜像进行代理是不行的,我们还需要对淘宝开源镜像进行代理。

现象(node构建日志)

> node-sass@4.14.1 install /home/jenkins/agent/workspace/enn-boiler-tools/enn-boiler-tools-test-enn-gft-web/node_modules/node-sass
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/linux-x64-64_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.14.1/linux-x64-64_binding.node": 

ESOCKETTIMEDOUT

Hint: If github.com is not accessible in your location
      try setting a proxy via HTTP_PROXY, e.g. 

      export HTTP_PROXY=http://example.com:1234

or configure npm proxy via

解决办法:

方法1. 可直接配置淘宝代理 :npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/

方法2. 使用nexus group代理,然后将group 远程仓库设置为淘宝,这样比直接设置淘宝代理更快

1. 配置nexus raw仓库

2. 填写远程代理地址: https://npm.taobao.org/mirrors/node-sass/

验证:

1. 未使用前仓库为空

2. 设置配置构建环境

npm config set registry http://192.168.110.112:8081/repository/npm_all 
npm config set sass_binary_site http://192.168.110.112:8081/repository/node-saas/
npm  -loglevel info install
npm run build:prod

3. 查看日志, 下载成功

看下nexus是否已经缓存

其他:

如何上传自定义的node的包

  • 需满足两个条件 1. 准备好需上传的node包

2. nexus 创建上传用户并赋权

1. 准备node包文件 ,自定义node 包

[root@zabbix tmp]# mkdir genNodePackage
[root@zabbix tmp]# cd genNodePackage
[root@zabbix genNodePackage]# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (gennodepackage) kaishidongle
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /tmp/genNodePackage/package.json:

{
  "name": "kaishidongle",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) yes

[root@zabbix genNodePackage]# cat package.json 
{
  "name": "kaishidongle",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

[root@zabbix genNodePackage]# touch index.js
[root@zabbix genNodePackage]# ls
index.js  package.json

# 一个node包就制作好了 这里只测试上传和下载 ,忽略制作包的可用性

2. nexus创建用户并赋权

创建用户

检查用户:

3. 配置上传环境

3.1 使用新创建用户进行登录

[root@zabbix genNodePackage]# npm adduser --registry=http://192.168.110.112:8081/repository/npm_hosted/
Username: kaishidongle
Password: 
Email: (this IS public) xx@163.com
Logged in as kaishidongle on http://192.168.110.112:8081/repository/npm_hosted/

3.2 推送node包

[root@zabbix genNodePackage]# pwd
/tmp/genNodePackage
[root@zabbix genNodePackage]# npm publish --registry=http://192.168.110.112:8081/repository/npm_hosted/ 
npm notice 
npm notice 📦  kaishidongle@1.0.0
npm notice === Tarball Contents === 
npm notice 0    index.js    
npm notice 208B package.json
npm notice === Tarball Details === 
npm notice name:          kaishidongle                            
npm notice version:       1.0.0                                   
npm notice package size:  267 B                                   
npm notice unpacked size: 208 B                                   
npm notice shasum:        e72106d9efe1f4e1e4d64f3b86a51639ddd335a3
npm notice integrity:     sha512-tDnn0vym6PH0R[...]j6Z6RhPXG3Aww==
npm notice total files:   2                                       
npm notice 
+ kaishidongle@1.0.0

3.3 检查结果 推送成功

3.4 测试下载已上传的包

[root@zabbix genNodePackage]# docker run --rm -it node bash  # 使用docker hub的node镜像进行测试 
root@7931c5ac918a:/# npm config set registry http://10.39.15.6:8081/repository/npm-group-test-by-lm  #配置nexus代理
root@7931c5ac918a:/# npm install kaishidongle    #装包
 npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#1 No description
npm WARN !invalid#1 No repository field.
npm WARN !invalid#1 No README data
npm WARN !invalid#1 No license field.

+ kaishidongle@1.0.0
added 1 package in 0.409s
root@7931c5ac918a:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  node_modules  opt  package-lock.json  proc  root  run  sbin  srv  sys  tmp  usr  var
root@7931c5ac918a:/# ls node_modules/  # 包拉取成功
kaishidongle

nexus 上的kaishdongle 这个包状态也已经改变

如何删除nexus上的包

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10055.html
标签
评论
发布的文章

使用 mapstructure 解析 json

2024-06-05 13:06:03

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!