原文地址 https://github.com/jindada/blog/issues/1
为什么需要搭建私有npm
- 私有的包只想在内部使用,还不想用git+ssh的方式,感觉不够优雅,并且还想可以配置相应的权限
- npm上的包下载很慢,想把已经下载过的包缓存在服务器上,下次 下载时首先检查更新,如果没更新直接走缓存
- 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库
为什么写这篇文章
写这边文章的时候,已经看到大神们写过的几篇不错的文章,这里想集中汇总一下,并且说明一下已有文章没有提到的坑
下面列举一下感觉不错的文章:
+ 使用Sinopia搭建私有的npm仓库
+ Sinopia | 从零开始搭建npm仓库
介绍sinopia
sinopia 的介绍与优缺点就不详细介绍了 上面2篇文章都有很详细的说明
部署安装和使用
安装 sinopia 与启动(假设你已经安装过node环境)
$ npm install sinopia -g
$ sinopia
然后打开浏览器 访问地址 http://localhost:4873/
正常显示即成功, 4873
是默认端口
配置npm代理
sinopia启动之后,首先通过 npm set registry http://localhost:4873/
来设置客户端使用的npm代理,然后就能正常使用了
添加用户与登录
$ npm adduser --registry http://localhost:4873 // 按照提示输入
$ npm login // 按照提示输入
登录成功之后,你就可以执行npm publish
发布到这个私有npm上面啦,刷新http://localhost:4873/
就可以看到你刚刚上传的包啦。
需要注意:你无法发布一个包名+版本号已经存在于公共仓库里的包,因为发布的时候,sinopia 首先会去你配置的公共仓库(
可以通过配置文件指定,默认是http://registry.npmjs.org
)去check,check通过后才允许上传包到 sinopia
配置
Sinopia的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。在没有指定配置文件的情况下,默认目录是安装目录 你可以通过sinopia -c path/config.yaml 来指定目录运行
目录下默认有两个文件:config.yaml和storage ,htpasswd 是添加用户之后自动创建的。
config.yaml — 配置访问权限,代理,文件存储路径等所有配置信息的
storage — 缓存npm包目录
htpasswd — 保存用户的账号密码等信息
config.yaml
:配置访问权限,代理,文件存储路径等所有配置信息的
# This is the default config file. It allows all users to do anything,
# so don't use it on production systems.
#
# Look here for more config file examples:
# https://github.com/rlidwka/sinopia