Table of Contentshtml
1、前提node
2、nexus3 npm仓库搭建linux
Nexus Repository Manager 中添加 npmnpm
设置权限网络
发布到hostedmaven
网上的不少教程都是服务器能够链接外网的前提下撰写的,但看过无数教程尚未一个专门针对服务器离线环境如何部署一个npm仓库。
1、前提
服务器离线、仓库离线
2、nexus3 npm仓库搭建
Nexus Repository Manager 中添加 npm
若是点击:
这里有三个类型的npm选项:
附上某歌翻译:
Proxying npm Registries
为了减小开发人员和CI服务器的重复下载量并提升下载速度,您应该对托管在https://registry.npmjs.org上的注册表进行代理。 默认状况下,npm直接访问此注册表。 您还能够代理您须要的任何其余注册表。
要代理外部npm注册表,您只需建立一个新的npm(代理),如“存储库管理”中所述。
最小配置步骤是:
- 定义名称
- 定义远程存储的URL,例如https://registry.npmjs.org
- 选择存储的Blob存储
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访问全部三个存储库中的软件包。添加的任何新软件包以及添加到组中的任何新存储库将自动可用。
- 建立 Proxying npm Registries 代理仓库
- 建立 Hosted npm Registries 代理仓库
- 建立 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的包:
3、下载项目须要的npm包
开始我觉得项目的所需的npm包只有项目中node_module中的那些包,但实际上npm在npm
一、在项目目录下,建立一个文件夹用于存放离线npm包
yarn config set yarn-offline-mirror ./npm-packages-offline-cache
二、设置离线缓存模式,并在项目目录下生成一个.yarnrc 文件
yarn config set yarn-offline-mirror-pruning true
三、将.yarnrc文件移到项目目录下
mv ~/.yarnrc ./
四、删除yarn.lock文件
rm -rf node_modules/ yarn.lock
五、安装npm包
yarn install
至此,咱们就会在根目录下找到当前项目的全部离线安装包
4、批量上传npm包到仓库
一、将上一步的全部npm包拷贝到没有网络环境的服务器中
二、首先要下载安装node.js(下载地址:https://nodejs.org/en/)
三、配置npm仓库地址
npm config -g set registry 远程仓库地址
三、登陆hosted仓库
npm adduser -registry=hosted类型npm仓库的地址,这里须要登陆仓库,会填写用户名、密码、email,可再nexus查看
四、对于nexus设置security–>Realms
添加“npm Bearer Token Realm”
五、对于上传的npm要求
yarn默认下载的npm压缩包就是上传须要的格式,压缩包下有一层package目录,package下才会有包文件(必定要包含package.json文件)
如果linux一次性压缩的tgz,npm打包的文件也是放到package目录下进行压缩
注意:打包文件放到package下,压缩包打开看到的目录为package,package进入
目录下npm打包的文件。
六、右键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
七、将uploadNpmPac.bat放到须要上批量上传的文件下,双击便可运行
至此,全部咱们须要的离线包便可上传到咱们的npm仓库。