16boke - 一路博客

使用sinopia搭建私有npm仓库

一、为什么要搭建私有仓库?

1、私有包托管在内部服务器中

2、项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包

3、希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库

4、服务器硬盘有限,希望只缓存下载过的包,而不是全部同步。

5、对于下载,发布npm包有对应的权限管理,安装方便,配置简单,依赖少。

二、关于sinopia

sinopia是一个零配置的私有的带缓存功能的npm包管理工具,使用sinopia,你不用安装CouchDB或MYSQL之类的数据库,Sinopia有自己的迷你数据库,如果要下载的包不存在,它将自动去你配置的npm地址上去下载,而且硬盘中只缓存你现在过的包,以节省空间。

三、为什么选择sinopia

sinopia有以下几个优势值得关注:

1、不同步拉取npm库,占据大量硬盘,没有硬盘被撑爆的问题;

2、安装配置极其简单,不需要数据库;

3、支持配置上游registry配置,一次拉取即缓存;

4、支持forever及pm2守护进程管理;

四、安装

首先需要先安装好node和npm环境。经过测试发现在windows上安装经常会出问题,同时对于node版本也不能太低,我选择的是比较新的9.5.0

安装直接执行:npm install -g sinopia

五、修改配置文件

默认sinopia你公布的地址和端口只能是本地使用:http://localhost:4873,如果需要在其它电脑使用必须要修改/root/.config/sinopia/config.yml文件,在文件的最后添加:

listen:0.0.0.0:4873

意思是允许任何ip访问4873端口。

为了加快sinopia下载模块的速度,可以将默认的registry改为taobao的registry:

uplinks:

npmjs:

url: http://registry.npm.taobao.org/

六、启动

$ sinopia

Sinopia doesn't need superuser privileges. Don't run it under root.

warn  --- config file  - /root/.config/sinopia/config.yaml

warn  --- http address - http://0.0.0.0:4873/

到此说明启动成功,就可以在浏览器上访问了。

七、使用

打开sinopia之后看到和npmjs官方很类似的页面,可以进行查询仓库内的模块,但是如果找不到,不会自动去npm上下载

在上传本地模块之前我们需要先在私有仓库中创建用户,登录到安装sinopia的服务器,执行:

npm adduser --registry http://localhost:4873。也可以在其他电脑上运行,只不过需要修改--registry为私有仓库地址。根据提示输入用户名、密码、邮箱(邮箱可以随便填),创建成功后就可以用这个用户来登录私有仓库管理后台。

八、配置本地registry为私有仓库地址

可以手动修改本机的.npmrc文件内容,这里推荐一个nrm模块,使用nrm可以管理仓库信息,具体nrm的使用见之前的文章。

这里我们添加这个私有仓库:

nrm add private http://XXX:4873

这样就添加完成,并且默认会使用这个仓库。

九、下载模块

添加完私有仓库之后我们下载一个redis模块看看私有仓库是否生效,

npm install -g redis,

我们发现控制台会显示从私有仓库进行下载各个模块,同时私有仓库服务器的日志文件会显示从taobao仓库进行下载,成功后会存在/root/.config/sinopia/storage目录内。

十、上传自己的模块

在上传到私有仓库之前需要先确保本地的registry已经切换到私有仓库的地址了。

在本地新建一个目录(npm-demo),进入此目录中,执行npm init

按照步骤输入或直接回车,到结束。

开始上传:

$ npm publish

如果之前没有登录过,会提示权限不足,需要登录,或者先输入

$ npm login

按要求输入用户名、密码、邮箱,如果成功会提示登录成功。然后再执行npm publish,即可上传到私有仓库中,同时在http://XXX:4873也可以看到上传的模块。