cnpmjs 是企业私有 npm 服务的解决方案,在其 Github Wiki 中给出了若干快速搭建该仓库并进行配置的方法。
这套笔记仅是笔者为了解决安装本身的 npm 库 这一问题而使用的方案,对于企业内部缓存的内容不作解释。
以前曾经尝试过 sinopia 和 git+ssh
的方案,前者由于项目最后更新为 2 年前,不敢用(并且你是 build failing
好吗),后者在 @Azard 的使用中发现会遇到 npm 调用 git 的权限问题,十分难以解决。node
cnpmjs 支持 MySQL,Postgres,SQLite,Mariadb 这一系列的关系型数据库。在快速部署当中,仅须要准备 node.js 环境。cnpmjs 会使用默认的 sqlite 数据库存储信息并启动。git
$ nohup cnpmjs.org start --admins='myname,othername' --scopes='@my-company-name,@other-name' &
这种依靠一条命令进行配置的方法轻便但不利于维护。尤为会在下面提到的经过修改 config 文件的内容,在此命令运行下 cnpmjs 不适用github
从源码部署当中说起了编辑本身的配置文件 config/config.js
,请不要修改原有的 config/index.js
在服务启动以后,于 ~/.cnpmjs.org/
下会有 logs
文件夹出现,能够进入查看服务器启动状态,同时能够建立 ~/.cnpmjs.org/config.js
,其效果等同于上面本身的配置文件,会覆盖默认配置。web
须要修改的配置主要有:(参考自 CNPM 配置指南【实战填坑】)sql
$ sudo vi $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 }
部署过程当中可能出现的问题:数据库
bindingHost
admins
registryHost
scopes
都是重要的配置项,其中npm
bindingHost
默认在127.0.0.1
不配置没法远程访问admins
决定了能够发包的用户(接下来会提到)scopes
是企业内部包的名称,听说不能发不带scopes的包(未验证)registryHost
是以后用户下载包内容的地址。十分重要。默认为 cnpmjs 官方。若是没有域名,请填写 xxx.xxx.xxx.xxx:7001 的格式部署成功以能够访问 7002 端口的 web 页面为判别条件。json
发包在进入你须要发的项目文件夹后就两个命令。
一个是要确保你在私有仓库的登陆状态,经过 npm set registry http://xxx.xxx.xxx.xxx:7001
预先设置 npm 的注册地址为你的私有仓库。http://
不能忘了,不然就会发现登陆的时候卡在那里,过了一分多钟才有反应。登陆使用 npm adduser
, npm login
都可。以后会输入以下信息缓存
Username:sanzhi Password:******** E-Mail(This is public):i@sanzhi.me
第一次登陆视同注册,以后你就处于私有仓库的登陆状态,可使用 npm publish
发包。发好了以后去私有仓库的 web 页面就能够搜到,默认 web 页面在 7002 端口
在确认 registry 被设置好后,使用 npm install @company/packagename
进行拉取。若是服务器没有另外设定包的访问权限,则无需登陆。
在这个过程当中,npm 会先访问 http://xxx.xxx.xxx.xxx/7001/@company/packagename
获取 json 信息,在该信息里的 version.xxx.dist.tarball
中存着某个版本的下载地址。这个地址的前缀即上面的 registryHost
。
cnpmjs 是以面向业界为主流的开源框架,其配置文档(即 wiki )很是具备功利性而缺乏详细的配置项解说,这与其强大多样的功能不对等,且过期或存在少量问题的文档居多,在复制粘贴配置的过程当中务必当心而不要贪图 5 分钟快速配置。关于 scope 的选项还没有验证是否能够将该选项去掉。