如何将 npm tgz 上传到 nexus3

How to upload npm tgz to nexus3

我需要为我们公司的内部 nodejs 开发设置一个私有的 nexus oss 3。必须从开发人员的计算机下载项目依赖项并复制到私有网络,然后 upload/publish 到私有 nexus 实例。

我们已经编写了一些脚本来从 npm 存储库中以 .tgz 格式提取所有依赖项,并将其复制到专用网络中。

但是我如何在不使用 GUI 的情况下将这些 .tgz 文件上传到我的私有 nexus 的 npm 存储库?

  • 您可以使用UI上传;但你选择不使用这种方式。
  • 您可以使用API上传; see the docs
  • 您可以使用npm publish上传;例如npm --registry=http://nxrm.local/repository/npm-hosted publish package.tgz

对于对快速解决方案感兴趣的人,这是我的过程和脚本:

  1. 在 nexus 中创建一个托管的 npm 存储库
  2. 创建一个用于包上传的帐户
  3. 将 'npm Bearer Token Realm' 领域授予帐户
  4. 运行 从 public npm 存储库
  5. 下载包的下载脚本
  6. 运行上传包到私有npm仓库的上传脚本

用于从 public 存储库

下载 npm 包的脚本
#!/bin/bash

NODE_MODULES_PATH=./node_modules
PACKAGES_PATH=./packages

mkdir -p $PACKAGES_PATH

for url in $(grep _resolved $NODE_MODULES_PATH/**/package.json | awk -F '"' '{print }' | sort -u); do
    if wget -c -q "$url" -P $PACKAGES_PATH; then
        echo "url=$url"
    else
        (>&2 echo "error download url=$url")
    fi
done

用于将 npm 包上传到私有 nexus npm 存储库的脚本

#!/bin/bash

REPOSITORY=[REPOSITORY_URL]
PACKAGES_PATH=./packages

npm login --registry=$REPOSITORY

for package in $PACKAGES_PATH/*.tgz; do
    npm publish --registry=$REPOSITORY $package
done

注:

  • 包必须以正常方式下载到本地
  • 脚本应该运行ning在项目根目录
  • 可以在您的私有托管 npm 存储库中获取 [REPOSITORY]

你也可以使用剩下的API直接管理组件:

POST ​/v1​/components

例如,要将包 my-npm-package-0.0.0.tgz 上传到存储库 npm-private,请使用以下命令:

curl -u user:password -X POST "http://localhost:8081/service/rest/v1/components?repository=npm-private" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "npm.asset=@my-npm-package-0.0.0.tgz;type=application/x-compressed"

可在端点 /#admin/system/api

找到完整的实时 API 规范

可以在 https://help.sonatype.com/repomanager3/rest-and-integration-api/components-api

找到官方的 nexus 文档