最近公司需要搭建一套公司自有的 npm 私有库, 于是用到了cnpm的解决方案
cnpm是企业内部搭建npm镜像和私有npm仓库的开源方案。它同时解决了现有npm架构的一些问题,目前有阿里维护。
cnpm的特点:
1、压缩包等文件从数据库中分离,放在CDN上,减轻了数据库的压力,提高了访问速度。
2、使用MySQL替换了CouchDB,更容易部署。同时由于大部分开发者更熟悉MySQL,因此架设起来更方便。
3、和MySQL都可以方便地扩展。
附上CNPM官方发布的架构图:
大概意思就是:
1、公司搭建私有npm服务器。
2、Developer通过指定镜像源到私有服务器的方法,将publish unpublish install 等操作 直接与公司服务器交互,形成包私有化(上传下载等存放于私有服务器上,并非官方NPM)
3、npm服务器端可配置admin账号,赋予权限,可且仅admin权限账号才可以决定是否将私有包公开化,上传至官方npm
4、Developer拉去包操作时首先会与私有服务器交互发现404 未找到资源将会同步由阿里维护的cnpm,若是依然404,cnpm会自行同步npm(cnpm 本身10分钟同步一次)
5、私有化实现
安装cnpm客户端
npm install cnpm -g
cnpm -v 查看是否安装成功
安装nrm镜像管理
因为国内墙的原因,主流方法是设置npm镜像源,这里推荐通过nrm来实现管理
nrm 地址 : https://www.npmjs.com/package/nrm
1、 npm install -g nrm
安装成功后
2、nrm ls
查看列表
[图片上传失败...(image-1cc825-1535357948305)]
3、nrm add okay http://10.60.0.124:7001
添加名为okay新的镜像地址(私有服务器地址)再次执行nrm ls 如下图
[图片上传失败...(image-763399-1535357948305)]
4、nrm use okay
通过nrm use name 的方式选择对应的镜像源 前面的 * 表示当前正在使用的镜像源, 接下来使用npm 便是这个镜像源了, mac下有可能有权限问题 自行解决。
私有库交互
1、登录操作
对应的publish 等操作 都需要在登录的前提下,所以请先登录
执行 cnpm login ( 其实就是注册)
Username: daimingru
Password: ******
Email:523121837@qq.com
登录完成后可以通过 执行 cnpm who am i 来查看当前登录用户
2、publish操作
登录后进入对应目录
执行npm init
编写完成后直接执行 cnpm publish 操作即可 (操作与npm 完全一致)
可通过web方式查看是否上传成功
1、命令行模式:open http://10.60.0.124:7002
2、浏览器直接打开如上命令
访问如下图
[图片上传失败...(image-bf960e-1535357948305)]
通过input 直接搜索即可 例如:
[图片上传失败...(image-bb82cc-1535357948305)]
服务器环境相关
1、node : V6.11.2
2、npm : V6.4.0
3、Mysql: 5.7