搭建 NPM 私有服务

应公司开发要求,需要搭建一个私有的 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: '[email protected]', // 管理员账号
       },
	  // 同步模式选择, 默认为 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…

发布了11 篇原创文章 · 获赞 22 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_19238139/article/details/86496349