cnpm是企业内部搭建npm镜像和私有npm仓库的开源方案。它同时解决了现有npm架构的一些问题

为什么企业需要私有NPM

主要有如下理由:

  • 确保npm服务快速、稳定:对于企业来说,上线生产系统的时候,需要花半小时甚至更久等待npm模块依赖安装完毕,是不可接受的。部署镜像后,可以确保高速、稳定的npm服务。
  • 发布私有模块:官方的npm上的模块全部是开源的。一些与企业业务逻辑相关的模块可能不适合开源。这部分私有的模块放在私有NPM仓库中,使用起来各种方便。
  • 控制npm模块质量和安全:npm上的模块质量参差不齐,搭建私有仓库,可以更严格地控制模块的质量和安全,只有经过审核的模块才允许被加入私有仓库。

cnpm的特点

  • 压缩包等文件从数据库中分离,放在CDN上,减轻了数据库的压力,提高了访问速度。
  • 使用MySQL替换了CouchDB,更容易部署。同时由于大部分开发者更熟悉MySQL,因此架设起来更方便。
  • CDN和MySQL都可以方便地扩展。

5分钟部署

部署cnpm只需5分钟。

依赖

  • Node
  • MySQL
  • Redis
  • qiniu CND (或其他CDN)

部署过程

获取代码

git clone git://github.com/fengmk2/cnpmjs.org.git $HOME/cnpmjs.org
cd $HOME/cnpmjs.org

创建MySQL表

; mysql -u yourname -p
mysql> use cnpmjs;
mysql> source docs/db.sql

然后编写配置文件config/config.js

module.exports = {
debug: false,
enableCluster: true, // enable cluster mode
mysqlServers: [
{
host: 'localhost',
port: 3306,
user: 'cnpmjs',
password: 'cnpmjs123',
}
],
mysqlDatabase: 'cnpmjstest',
redis: {
host: 'localhost',
port: 6379,
},
nfs: null, //use your own CND here
enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm
admins: {
admin: 'admin@cnpmjs.org',
},
syncModel: 'exist'
};

安装依赖

make install

启动

; npm run start

Starting cnpmjs.org ...
Start nodejs success. PID=27175

好了,部署完成!

客户端设置

服务跑起来之后,企业员工需要在自己的电脑上配置下客户端。

首先安装cnpm客户端:

npm install -g cnpm

在自己的脚本的启动文件(例如.zshrc.bashrc)中添加别名:

echo "#lnpm alias\nalias lnpm='cnpm --registry=http://localhost:7001\
--registryweb=http://localhost:7002\
--cache=$HOME/.npm/.cache/lnpm\
--userconfig=$HOME/.lnpmrc'" >> $HOME/.zshrc && source $HOME/.zshrc

注意用自己的仓库信息替换上面命令的相关部分。

之后就可以用lnpm命令访问企业的内部NPM了,各种接口和NPM一样。

注意,目前cnpm的权限控制比较简单,只有admin用户有权publishNPM模块。如果你的企业需要灵活的权限控制,需要自行开发。

使用cnpm搭建企业内部私有NPM仓库的更多相关文章

  1. 私有 npm 仓库的搭建

    cnpm 是企业内部搭建 npm 镜像和私有 npm 仓库的开源方案,当企业业务逻辑相关的模块可能不适合开源.这部分私有的模块就可以放在私有 npm 仓库中来管理和维护. 以下为搭建私有 npm 的详 ...

  2. 使用Sinopia搭建私有npm仓库

    使用Sinopia搭建私有npm仓库 在用npm装包的时候,每次都要下载一大堆,慢且不说,npm还老被墙,所以就想到在公司内部搭建npm仓库镜像.大概看了几个,觉得Sinopia最简单也好用,所以就使 ...

  3. (转)搭建企业内部yum仓库(centos6+centos7+epel源)

    搭建企业内部yum仓库(centos6+centos7+epel源) 原文:https://www.cnblogs.com/nulige/p/6081192.html https://www.linu ...

  4. 怎么在 CentOS 6 上配置私有 NPM 仓库?

    Sinopia 是一个简单易用的私有 NPM 仓库服务器.在 CentOS 6 上安装时,遇到如下报错(Node 版本 6.9.1) #error This version of node/NAN/v ...

  5. 搭建docker registry私有镜像仓库

    搭建docker registry私有镜像仓库 一.安装docker-distribution yum install -y docker-distribution 安装完成后,启动服务: syste ...

  6. 手把手搭建一套私有 npm 服务

    手把手搭建一套私有 npm 服务 gnpm xnpm pnpm lnpm refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. 使用Sinopia部署私有npm仓库

    使用Sinopia部署私有npm仓库 [root@localhost ~]# hostnamectl set-hostname --static npm-server [root@npm-server ...

  8. 使用cnpm搭建私有NPM仓库 发布npm包

    关于如何使用cnpm搭建私有的npm仓库看这里→ http://blog.fens.me/nodejs-cnpm-npm/ 我本人还没有机会真正实践操作过,公司的npm仓库是我老大搭建的,我这里仅仅记 ...

  9. Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库

    Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...

随机推荐

  1. NeHe OpenGL教程 第二十一课:线的游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. linux命令(5)文件操作:ls命令、显示文件总个数

    一:ls命令是最常用的linux命令了:下面是ls --help里面的用法 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下 ...

  3. RPC介绍

    转载http://blog.csdn.net/mindfloating/article/details/39474123/ 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  4. android-Service和Thread的区别

    1.服务不是单一的进程.服务没有自己的进程,应用程序可以不同,服务运行在相同的进程中. 2.服务不是线程.可以在线程中工作. 一.在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务. ...

  5. Ubuntu下tftp服务搭建

    1.安装软件包 sudo apt-get install tftpd tftp xinetd 2.建立配置文件 在/etc/xinetd.d/下建立一个配置文件tftp sudo vi /etc/xi ...

  6. [Java] 01 String 内存分析

    public class StringTest{ public static void main(String[] args){ String str1 = new String("123& ...

  7. [ActionScript3.0] 逻辑或"||=" ,等于"=="和全等于"==="

    function a(o:Object):void { o||=new Object();  trace(o); } //此上下两个方法作用是一样的 function b(o:Object):void ...

  8. [ActionScript3.0] 深表复制

    function clone(obj:Object):Object{ var byteArray:ByteArray = new ByteArray(); byteArray.writeObject( ...

  9. js中格式化时间字符串

    .net 程序员肯定有遇到过,将一个对象json序列化之后Date 字段 就会转化成 '/Date(1370770323740)/' 这种格式的数据,下面介绍一种在js中,关于时间格式的转换. < ...

  10. 一些代码 I (斐波那契、for...else...、try和return、classmethod、统计个数)

    1. 斐波那契 from itertools import islice def fib(): a, b = 0, 1 while True: yield a a, b = b, a+b print ...