当前位置: 首页 > 后端技术 > Node.js

使用cnpmjs搭建企业私有npm仓库

时间:2023-04-04 00:32:24 Node.js

cnpmjscnpmjs是一个企业私有npm服务的解决方案。其GithubWiki给出了几种快速搭建仓库和配置的方法。本套笔记只是笔者在解决安装自己的npm库问题时使用的方案,不对企业内部缓存的内容进行说明。sinopia和git+ssh方案我都试过。前者不敢用,因为项目上次更新是2年前(而且你是buildfailing),后者在使用@Azard时发现npm调用git的权限问题非常难解决。服务器部署部署主要分为以下两种:快速部署和源代码部署。cnpmjs支持MySQL、Postgres、SQLite、Mariadb等一系列关系型数据库。快速部署只需要准备node.js环境。cnpmjs会使用默认的sqlite数据库来存储信息并启动。$nohupcnpmjs.orgstart--admins='myname,othername'--scopes='@my-company-name,@other-name'&这种一条命令配置的方式虽然轻巧,但不利于维护。特别的,下面会提到,通过修改config文件的内容,运行该命令时,cnpmjs不适用。deploymentfromsource中提到你编辑自己的配置文件config/config.js,请不要修改原来的config/index。js服务启动后,在~/.cnpmjs.org/下会有一个logs文件夹,可以进入查看服务器启动状态,同时可以创建~/.cnpmjs.org/config.js,其作用相当于上面自带的配置文件,覆盖了默认配置。需要修改的配置主要有:(参考CNPM配置指南【实战填坑】)$sudovi$HOME/.cnpmjs.org/config.json{"database":{"db":"cnpmjs","dialect":"mysql","host":"localhost","port":3306,"username":"root","password":"yourpassword","pool":{"maxConnections":10,"minConnections":0,"maxIdleTime":30000}},"enablePrivate":true,"syncModel":"none","bindingHost":"0.0.0.0","admins":{"sanzhi":"i@sanzhi.me",},"scopes":["@company"],"registryHost":"npm.sanzhi.me","alwaysAuth":false}部署过程中可能出现的问题:从npm包快速部署会牺牲配置可变性请提前配置好数据库,推荐MySQL,项目地址上SQLite的不多。bindingHostadminsregistryHostscopes都是重要的配置项,其中bindingHost默认为127.0.0.1。如果不进行配置,则无法远程访问管理员。它决定了可以发送包的用户(将在后面提到)。package(unverified)registryHostofscopes是用户稍后下载包内容的地址。很重要。默认是cnpmjs官方。如果没有域名,请填写xxx.xxx.xxx.xxx:7001格式。成功部署是基于7002端口访问网页。发送包发送包进入你需要发送的项目文件夹后,有两个命令。一是保证你在私有仓库的登录状态,通过npmsetregistryhttp://xxx.xxx.xxx.xxx:7001预先设置npm注册地址到你的私有仓库。不要忘记http://,否则你会发现你登陆的时候会卡在那里,等一分多钟才有反应。要登录,请使用npmadduser或npmlogin。之后,您将输入以下信息用户名:sanzhi密码:********E-Mail(公开):i@sanzhi.me首次登录即为注册,之后您将进入私有仓库登录状态,可以使用npmpublish发送包。发送后,您可以在私人仓库的网页上搜索。默认网页由客户端在7002端口调用,确认注册中心设置好后,使用npminstall@company/packagename拉取。如果服务器没有附加设置包的访问权限,则不需要登录。在这个过程中,npm会先访问http://xxx.xxx.xxx.xxx/7001/@company/packagename获取json信息,信息下载链接中的version.xxx.dist.tarball中有某个版本.这个地址的前缀就是上面的registryHost。综上所述,cnpmjs是一个面向行业的开源框架。它的配置文档(即wiki)非常功利,缺乏详细的配置项解释。这与其强大多样的功能不相称,而且大多数已经过时或存在一些问题。复制和粘贴配置时要小心,不要进行5分钟的快速配置。关于scope选项,这个选项能不能去掉还没有验证。