使用cnpm搭建个人私有npm仓库(一)——简单介绍及基本配置

最近几天研究了下如何使用cnpm搭建个人私有的npm仓库,并把自己的工具库发布到了这个npm仓库。

使用私有npm仓库可以很好的管理自己的一些不愿意公开的工具库。尽管npm可以直接从git地址或者文件夹安装,但是这种方式有个比较大的弊端,就是更新包时使用npm update命令是不管用的,必须使用npm install xxx重新安装一遍,强迫症表示无法接受。

啰嗦了这么多,现在切入主题,来介绍一下私有npm的搭建。

下载

克隆cnpm仓库,并进入cnpmjs.org这个目录

1
2
$ git clone git://github.com/cnpm/cnpmjs.org.git $HOME/cnpmjs.org
$ cd $HOME/cnpmjs.org

配置数据库

支持mysql,sqlite,mariadb和postgres,我使用的是mysql,这里就以mysql为例。

进入mysql,使用docs目录下的sql文件创建所需的数据表

1
2
3
$ mysql -u yourname -p
mysql> use cnpmjs;
mysql> source docs/db.sql

修改配置文件

默认配置文件位于config/index.js,这里我们创建一个自己的配置文件来覆盖默认配置

1
$ vim config/config.js

然后将config/index.js需要修改的配置复制到config/config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = {
database: {
db: 'cnpmjs',
host: 'localhost',
port: 3306,
username: 'cnpmjs',
password: 'cnpmjs123'
},
admins: {
admin: 'admin@cnpmjs.org',
},
syncModel: 'none',
forcePublishWithScope: true,
scopes: ['@lonord'],
registryHost: 'localhost:7001'
};

其中forcePublishWithScope表示强制规定发布到该npm仓库的包的包名必须是带有scope的(比如这样一个包@lonord/lib.db,里面的@lonord就是scope,scope可以理解为限定了一个命名空间,npm官方解释https://docs.npmjs.com/misc/scope),而scopes属性限定了scope名称。

其他每个字段的含义可以打开config/index.js查看,这里不多介绍了

安装依赖

1
$ npm install --build-from-source --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node

运行

1
$ npm start

此时cnpm服务已经在后台运行了,访问http://localhost:7002就可以进入cnpm的web主页,如图

而registry的地址是http://localhost:7001

发布/安装私有npm包

可以使用npm也可以使用cnpm,配置方法相同。首先添加一个用户,当前未配置用户认证,随意输入一个用户名密码就可以了

1
$ npm adduser --registry=http://localhost:7001 --scope=@lonord

上面这条命了表示:添加一个用户,该用户仅在使用http://localhost:7001这个registry时生效,并且还指定了安装和发布scope为@lonord的包时使用前面的registry

然后在需要发布的包(包名以@lonord为scope)目录下使用命令npm publish就可以把包发布到这个npm仓库中;输入命令npm install @lonord/xxx就可以在其他工程中安装这个包。

到此,基本上已经可以满足一般私有npm仓库的需求了,但是此时的仓库是公开的,只要可以连接到该cnpm所在的服务器就都可以安装和发布私有模块。想要设置安装和发布权限?没问题,请继续看下一篇使用cnpm搭建个人私有npm仓库(二)——私有仓库的权限控制