深入浅出FE(十三)前端nexus3 Yarn离线部署npm仓库

纵饮孤独 提交于 2020-10-15 21:32:30

Table of Contents

一、前提

二、nexus3 npm仓库搭建

Nexus Repository Manager 中添加 npm

Proxying npm Registries

Private npm Registries

Grouping npm Registries

设置权限

发布到hosted

三、下载项目需要的npm包

四、批量上传npm包到仓库

五、参考资料


网上的很多教程都是服务器可以连接外网的前提下撰写的,但看过无数教程还没有一个专门针对服务器离线环境如何部署一个npm仓库。

一、前提

服务器离线、仓库离线

二、nexus3 npm仓库搭建

Nexus Repository Manager 中添加 npm

如果点击:

 

这里有三个类型的npm选项:

 

 

附上某歌翻译:

Proxying npm Registries

为了减少开发人员和CI服务器的重复下载量并提高下载速度,您应该对托管在https://registry.npmjs.org上的注册表进行代理。 默认情况下,npm直接访问此注册表。 您还可以代理您需要的任何其他注册表。
要代理外部npm注册表,您只需创建一个新的npm(代理),如“存储库管理”中所述。
最小配置步骤是:

Private npm Registries

私人npm注册表可用于上传您自己的软件包以及第三方软件包。 您可以通过在存储库管理器中设置npm格式的托管存储库来创建私有的npm注册表。 为了这些目的,建立两个独立的托管存储库是一个很好的做法。
要创建具有npm格式的托管存储库,只需创建一个新的npm(托管),如“存储库管理”中所述。
最小配置步骤是:

  • 定义名称
  • 选择存储的Blob存储

随着软件包从存储库部署或删除,npm注册表信息将立即更新。

Grouping npm Registries

存储库组是将所有npm注册表存储库从存储库管理器公开给您的用户的推荐方式,而不需要任何其他客户端配置。存储库组允许您将多个代理和托管存储库的聚合内容公开为一个URL到npm和其他工具。这可以通过创建一个新的npm(组),如“存储库管理”中所述,用于npm存储库。
最小配置步骤是:

  • 定义名称
  • 选择存储的Blob存储
  • 以所需的顺序将npm存储库添加到成员列表中

典型的有用的示例是将代理存储库分组:代理npm注册表,npm托管存储库与内部软件包和另一个npm托管存储库与第三方软件包。
使用存储库组的URL作为客户端工具中的npm存储库URL,您可以使用一个URL访问所有三个存储库中的软件包。添加的任何新软件包以及添加到组中的任何新存储库将自动可用。


  1. 创建 Proxying npm Registries 代理仓库

 

  1. 创建 Hosted npm Registries 代理仓库

 

  1. 创建 Grouping npm Registries 仓库
    需要注意的是组仓库要把之前的 proxy 和 hosted 都添加上。

 

我的目录对应为 mytest/myhost/mygroup

在home目录下, 的.npmrc文件中添加 registry = http://localhost:8081/repository/npm-all/ 。这个路径要和自己的路径一致,并且最后的rep名要和group相同。

 

此时可以验证一下 是否依赖走了代理:

image

设置权限

把这个选项拖到右边就可以了

 

在admin之外可以重新设置一个账号,以及权限

 

// 使用
$ npm login --registry https://nexus.onebean.net:8089/repository/onebean-npm-group/
// 进行登陆,需要填写账号、密码以及邮箱。

 

发布到hosted

我和原教程不一样的是:我发布到本地hosted, 而不是直接到npm社区,这里需要注意的是 通过proxy是可以直接发布到npm社区的,使用的是社区的账号密码,这个需要提前申请

要发布的模块,必须保证在根目录下有package.json文件,否则会报错。

pachage.json文件内容比较随意,如果比较懒 可以用 npm init 直接自动生成。

 

  {
      "name": "myhost",
      "version": "1.0.0"
    }

然后执行发布命令:

 

 $ npm publish --registry https://nexus.onebean.net:8089/repository/onebean-npm-hosted/

然后我遇到了报错,按照报错执行

 $ npm adduser --registry https://nexus.onebean.net:8089/repository/onebean-npm-hosted/

这里值得注意的是, adduser的时候要指明是哪个rep,要不就会add到默认的.npmrc 里添加的 rep中

 

添加完用户之后,再执行发布命令就ok了。

 

package.json可以指定name 和version并且可以添加发布路径的配置:

 

  {
     "name": "intro",
     "version": "1.0.0",
     "publishConfig" : {
         "registry" : "https://nexus.onebean.net:8089/repository/onebean-npm-hosted/"
      }
  }

这样的话发布直接用 npm publish就可以了。

发布之后可以在 系统中的 左侧browse 中的assets中看到上传的资源

 

group 中可以同时看到 proxy 和 hosted 的资源, proxy会存下第一次下载过的目录,之后再下载时走的是代理,hosted存的是本地上传的包资源。

然后可以在本地下载一下刚才上传到hosted的包:

 

三、下载项目需要的npm包

开始我以为项目的所需的npm包只有项目中node_module中的那些包,但实际上npm在npm

1、在项目目录下,创建一个文件夹用于存放离线npm包

yarn config set yarn-offline-mirror ./npm-packages-offline-cache

2、设置离线缓存模式,并在项目目录下生成一个.yarnrc 文件

yarn config set yarn-offline-mirror-pruning true

3、将.yarnrc文件移到项目目录下

mv ~/.yarnrc ./

4、删除yarn.lock文件

rm -rf node_modules/ yarn.lock

5、安装npm包

yarn install

至此,我们就会在根目录下找到当前项目的所有离线安装包

四、批量上传npm包到仓库

1、将上一步的所有npm包拷贝到没有网络环境的服务器中

2、首先要下载安装node.js(下载地址:https://nodejs.org/en/)
3、配置npm仓库地址
npm config -g set registry 远程仓库地址

3、登录hosted仓库
npm adduser -registry=hosted类型npm仓库的地址,这里需要登录仓库,会填写用户名、密码、email,可再nexus查看

4、对于nexus设置security–>Realms
添加“npm Bearer Token Realm”
在这里插入图片描述
5、对于上传的npm要求


yarn默认下载的npm压缩包就是上传需要的格式,压缩包下有一层package目录,package下才会有包文件(一定要包含package.json文件)
若是linux一次性压缩的tgz,npm打包的文件也是放到package目录下进行压缩
注意:打包文件放到package下,压缩包打开看到的目录为package,package进入
目录下npm打包的文件。
在这里插入图片描述
6、右键bat文件编辑,将url:改成hosted类型的npm的仓库




@echo off
:: init params
set deployFile=*.tar.gz
set deployFile2=*.tgz
set url=http://xxx.xxx.xx.xx:8081/repository/npm-hosted/
echo Searching tar.gz and tgz file...
rem 启用"延缓环境变量扩充"
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (%deployFile% %deployFile2%) do (
   set name=%%f
   echo !name! to deploy to %url%
   rem deploy to server
   call npm publish -registry=%url% !name!
)

pause

7、将uploadNpmPac.bat放到需要上批量上传的文件下,双击即可运行

至此,所有我们需要的离线包即可上传到我们的npm仓库。

五、参考资料

1、npm 模块安装机制简介

2、nexus 上安装npm私服仓库

3、nexus私服批量上传maven库,nuget库,npm库(上传jar包可以自动检测版本号)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!