想搭建一个属于公司内部的 npm 镜像?这边文章或许能帮到你!

  • 公司开发环境与外网隔绝,需要搭建内网npm源
  • 确保npm服务快速、稳定,提高下载速度
  • 不是搭建 npm 私服,而是镜像源

npmjs.org将自己的项目挂在https://github.com/npm/npm-registry-couchapp。原项目项目地址为:https://github.com/isaacs/npmjs.org。需要制作镜像的同学可以按照说明来制作镜像,首先你需要安装CouchDB 1.4.0或更新的版本。

由于文档较少及项目更新导致操作流程不一致,在实践中出现一些坑,只能亲自填坑。


一、安装CouchDB

使用 YUM 安装,推荐阅读 CouchDB安装以及使用这篇文章,下面列举几个重要的步骤。

1
2
[root@VM_0_9_centos ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

1、安装rpm仓库

修改/etc/yum.repos.d/bintray-apache-couchdb-rpm.repo,命令如下:

vim /etc/yum.repos.d/bintray-apache-couchdb-rpm.repo
添加如下内容,保存并退出:

1
2
3
4
5
6
[bintray--apache-couchdb-rpm]
name=bintray--apache-couchdb-rpm
baseurl=http://apache.bintray.com/couchdb-rpm/el$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1

2、修改default.ini

由于couchdb默认是监听本地的请求,因此你需要配置它,让它可以接受来自局域网内的请求,将配置中的[httpd]段端口和地址前面的分号注释去掉,将127.0.0.1改成0.0.0.0然后重启服务即可。

安装完成之后,启动和停止的命令如下:
$ sudo systemctl start couchdb
$ sudo systemctl stop couchdb

1
2
port = 5984 // 默认端口号,可修改
bind_address = 0.0.0.0 //把127.0.0.1修改为0.0.0.0

启动成功后访问http://localhost:5984/会出现如下图所示:

进入数据库配置页面http://localhost:5984/_utils/#


二、下载couchapp

下面就是couchapp的使用说明了,简单翻译下。

  • You need CouchDB version 1.4.0 or higher. 1.5.0 or higher is best.
    你需要CouchDB 1.4.0 以上的版本,yum 会默认安装最新版本,我目前安装的是 2.3.1。

  • Once you have CouchDB installed, create a new database:
    curl -X PUT http://localhost:5984/registry
    使用这个命令创建名为registry数据库,也可以直接在页面上配置。

  • You’ll need the following entries added in your local.ini
    然后把这一段内容放进local.ini,我的路径为/opt/couchdb/etc

1
2
3
4
5
6
7
8
9
[couch_httpd_auth]
public_fields = appdotnet, avatar, avatarMedium, avatarLarge, date, email, fields, freenode, fullname, github, homepage, name, roles, twitter, type, _id, _rev
users_db_public = true

[httpd]
secure_rewrites = false

[couchdb]
delayed_commits = false


最后就是复制整个项目啦,并且执行相应的脚本。用户名和密码不是必须,但最好是创建用户名和密码,否则脚本可能运行出错。

Clone the repository if you haven’t already, and cd into it:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git clone git://github.com/npm/npm-registry-couchapp
cd npm-registry-couchapp

npm install

npm start \
--npm-registry-couchapp:couch=http://admin:password@localhost:5984/registry

npm run load \
--npm-registry-couchapp:couch=http://admin:password@localhost:5984/registry

npm run copy \
--npm-registry-couchapp:couch=http://admin:password@localhost:5984/registry

vim ~/.npmrc
_npm-registry-couchapp:couch=http://admin:password@localhost:5984/registry

会遇到问题的地方上面都过了一遍,在couchdb的web管理界面http://localhost:5984/_utils/#/replication进行同步操作,记得勾选连续Continuous而不是一次性One time,让脚本不停的跑,由于数据量大,同步镜像需要很长时间。


三、测试使用镜像

说明文档里提到三种方式,我们直接使用全局配置把registry地址改成我们内网的即可,然后就可以跟平常一样使用npm安装模块,你会发现安装模块时请求的是内网镜像地址了。

npm config set registry http://localhost:5984/registry/_design/app/_rewrite

然后测试一下看看:npm search node

Bingo!


文章中提到的localhost地址记得改成你自己实际的ip地址,在镜像完成同步之前,若你使用npm命令测试安装可能看到404的结果,不要着急。


参考文章: