利用 nexus 布署私有 npm 仓库

布署

基于 docker 布署 nexus3。

docker pull sonatype/nexus3
docker volume create --name nexus-data
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3

镜像详情:https://hub.docker.com/r/sonatype/nexus3

将IP和端口发布到外网,或直接使用内网IP和端口,以下用 192.168.1.11:8081 为例。

权限

Roles

创建新组 publishPrivlleges 选择 nx-repository-view-*-*-*

Users

创建新用户 npmRoles 选择 publish

Realms

Active 添加 npm Bearer Token Realm

仓库

Blob Stores (可选)

新增存储,TypeFileNamenpm

Repositories

  1. proxy 仓库
    1. 新增仓库,Recipenpm(proxy)
    2. Namenpm-proxyRemote storagehttps://registry.npm.taobao.orgBlob storenpm ,其他默认
  2. hosted 仓库
    1. 新增仓库,Recipenpm(hosted)
    2. Namenpm-privateBlob storenpm ,其他默认
    3. 保存后生成的 URLhttp://192.168.1.11:8081/repository/npm-private/
  3. group 仓库
    1. 新增仓库,Recipenpm(group)
    2. NamenpmBlob storenpmMember repositoriesMembersnpm-proxynpm-private ,其他默认
    3. 保存后生成的 URLhttp://192.168.1.11:8081/repository/npm/

本地拉取

# 设置代理
npm config set registry http://192.168.1.11:8081/repository/npm/
npm config set sass-binary-site https://npm.taobao.org/mirrors/node-sass
# 安装包
npm i -S private/package

开发和推送

在本地开发目录下执行 npm init ,生成配置,可以都使用默认值。生成 package.json ,示例如下:

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

package.json 添加以下配置:

  "publishConfig": {
    "registry": "http://192.168.1.11:8081/repository/npm-private"
  },

编写包代码,可以在需要安装的项目中直接引入本地包:

npm i -S /path/to/npm/package

当修改包代码时,安装包的项目会自动更新。

身份认证:

运行 echo -n 'npm:password' | openssl base64password 替换为 npm 账号的密码) ,生成编码(例如 xxx )。编辑 ~/.npmrc ,追加以下配置:_auth=xxx

推送:

npm publish