应公司开发要求,需要搭建一个私有的 NPM 服务。这样的话,我们在针对公司内部的一些业务逻辑上,可以将通用的部分封装成包,并发布到私有的 NPM 服务上,该博文将会带领你进行搭建一个公司的私有服务。网上查阅过后,发现有好多的方法可以进行搭建私有服务,但是最终我还是选择了基于 CNPM 搭建私有服务。
一、为什么要搭建私有 NPM 服务
- 私有的包,只想在内部使用,其中的代码逻辑有可能涉及到‘小秘密’。
- 有些时候,使用 NPM 装包的时候下载速度慢如龟速。
- 我们想在下载的时候,私有的包用公司内部的服务器,公共的包走公共仓库。
二、常用搭建私有 NPM 服务方式
1、 Sinopia,是一个零配置的私有的带缓存功能的 NPM 包管理工具,使用 sinopia ,你不用安装一些数据库,它有自己的数据库,如果要下载的包不存在,它将自动去你配置的 npm 地址上去下载,而且硬盘中只缓存你下载过的包,以节省空间。
优点:
- 不同步拉取 npm 库,占据大量硬盘。
- 配置简单,不需要依赖数据库。
- 支持配置上游 registry 配置,一次性拉取即缓存。
- 可使用守护进程管理,如 PM2、Forever。
缺点:
2015年10月后停止了丢 sinopia 的维护和升级
2、Verdaccio:这种方式是 sinopia 的 fork 过来的。是一个 Node.js 创建的轻量的私有 npm proxy registry。这种方式也挺好的。具体的介绍大家可以看其官网。我就不多介绍了。
3、CNPM :基础 CNPM 的方式来进行搭建私有服务是大多数企业
三、如何使用 CNPM 的方式搭建私有服务
1、在服务器上安装 MySql
// 切换到 root 用户,我使用的服务器系统是 Ubuntu 14.0 的。
apt-get install mysql-server
2、安装 CNPMJS.org
- git clone https://github.com/cnpm/cnpmjs.org.git
- cd npmjs.org && vim config/config.js
3、配置 CNPM
module.exports = {
database: {
db: 'privateCNPM', // 数据库的名字
host: '127.0.0.1', // 默认
port: 3306, // 默认
username: 'root', // 登录数据库时候的账户
password: '', // 数据库的账户密码
dialect: 'mysql' // 使用 mysql >= 5.6.11 的存储方式,默认是 sqlite3 >= 3.0.4, 还支持 postgres, mariadb.
},
admins: {
admin: 'xxx@xx.com', // 管理员账号
},
// 同步模式选择, 默认为 none
// none: 不同步任何模块
// exist: 只同步存在的模块
// all: 同步所有的模块
syncModel: 'exist',
// 注册表范围,如果不设置,将不支持范围
// 作为公司内部的还是要加一个前缀的。
scopes: ['@xxx'],
// 安装包时候的域名地址, 此处改为你的服务器的 IP 即可
registryHost: 'xxx:7001',
// 设置只能通过服务器 IP 进行访问
bindingHost: 'xxx'
// 其他的设置可以查看 index.js 中的配置。
};
四、MySql 配置
// 该步操作要在 cnpm.org 文件根目录下进行操作
- mysql -u root -p
// 输入密码进入 mysql, 执行以下命令
- CREATE DATABASE privateCNPM;
- use privateCNPM;
- source docs/db.sql
五、启动服务
// 当前路径为 cnpmjs.org 根目录
- npm i
- npm start // 启动服务
验证一下,看看能不能访问成功。
访问 http://xxx:7001 出现 data_tables
访问 http://xxx:7002 出现 CNPM 的界面
xxx 代表你公司服务器的 IP 地址
六、如何发布包
我这是 mac os 环境。重点提示:在你发布的包中 package.json 中的 name 一定要带有 scope,因为我们在 cnpmjs.org 中的 config 中配置了 scope 为 @xxx , 所以你的 name 一定要以 @xxx/ 开头!!!
第一种方式:
1、全局安装 cnpm
sudo npm i cnpm -g
2、在 .zshrc 中添加 alias
alias bnpm="cnpm --registry=http://xxx:7001 \
--disturl=http://xxx:7001/dist \
--registryweb=http://xxx:7002 \
--cache=$HOME/.bnpm/.cache \
--userconfig=$HOME/.bnpmrc"
// 以上的 xxx 代表你们公司的服务器 IP 地址, bnpm 是我随便起的一个名字,你也可以根据你的想法来命名。--userconfig 后边的名字最好改成跟你的命名一样的,方便查询。之后电脑安装私有包都会采用此名称安装。
// 保存退出之后,执行 source .zshrc 。
3、添加用户
nnpm adduser
4、登录
nnpm login
5、发包
nnpm publish
第二种方式:
1、使用 nrm 来进行管理你的安装源
npm i nrm -g
2、添加源
// 名称自拟,源地址为 http://xxx:7001/
nrm add <名称> <源地址>
3、采用这种方式切换源之后,以后安装东西将会采用 npm 的方式安装,只不过安装源指向的是私有服务器,而不是其他地址了,当然也可以进行切换安装源。
4、nrm 简单实用
// 查看源
nrm ls
// 增加源
nrm <registry> <url> [home]
// 查看当前源名称
nrm current
// 测试源响应速度
nrm test [registry]
// 删除源
nrm del <registry>
Ending…Thx…