如何将 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
对于对快速解决方案感兴趣的人,这是我的过程和脚本:
- 在 nexus 中创建一个托管的 npm 存储库
- 创建一个用于包上传的帐户
- 将 'npm Bearer Token Realm' 领域授予帐户
- 运行 从 public npm 存储库
下载包的下载脚本
- 运行上传包到私有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 文档
我需要为我们公司的内部 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
对于对快速解决方案感兴趣的人,这是我的过程和脚本:
- 在 nexus 中创建一个托管的 npm 存储库
- 创建一个用于包上传的帐户
- 将 'npm Bearer Token Realm' 领域授予帐户
- 运行 从 public npm 存储库 下载包的下载脚本
- 运行上传包到私有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
可以在 https://help.sonatype.com/repomanager3/rest-and-integration-api/components-api
找到官方的 nexus 文档