npm私有仓库搭建
背景
Node.js开发本地项目,有时不同项目之间存在依赖,如果不想把项目发布到npm社区的仓库,则需要有自己本地的仓库。
有些公司采用的是内网开发,很多npm资源无法从内网去下载。
sinopia(主流)
使用文件系统作为存储,仅保存用户需要的包,如果本地仓库没有对应的包,则从指定的registry下载,默认为npmjs.org,可以改成淘宝的镜像。
安装
Sinopia的安装比较简单,只需使用npm一条安装命令即可:
npm install -g sinopia
或者 yarn global add sinopia
安装环境
1.python2.7
2.不支持fs-ext和crypt3
使用
启动: sinopia
你也可以打开 地址看一下http://localhost:4873/
就说明成功了
换npm 源
npm config set registry http://xxx.xx.xx.xx:4873/
//xxx.xx.xx.xx 为自己的ip
建议使用用 nrm
npm install -g nrm # 安装nrm
nrm add name http://XXXXXX:4873 # 添加本地的npm镜像地址
nrm use name # 使用本址的镜像地址 name为你要增加的地址
新建用户
npm adduser
Username: test
Password: test
Email: (this IS public) xxx@xxxx
然后就可以发布包了
npm publish // 在自己要发布的包 路径打这个命令
这边发布的包可以 是自己写的一些资源 或者是其他的 但是要根据npm 包的规范
本人配置文件
#
# 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/tree/master/conf
#
# path to a directory with all packages
storage: ./storage # npm包存放的路径
auth:
htpasswd:
file: ./htpasswd
# Maximum amount of users allowed to register, defaults to "+inf".
# You can set this to -1 to disable registration.
# max_users: 1000
max_users: 1000 # 默认为1000,改为-1,禁止注册
# a list of other known repositories we can talk to
uplinks:
npmjs:
url: http://registry.npm.taobao.org/ # 默认为npm的官网,由于国情,修改 url 让sinopia使用 淘宝的npm镜像地址
packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated
'*':
# allow all users (including non-authenticated users) to read and
# publish all packages
#
# you can specify usernames/groupnames (depending on your auth plugin)
# and three keywords: "$all", "$anonymous", "$authenticated"
access: $all
# allow all known users to publish packages
# (anyone can register by default, remember?)
publish: $authenticated
# if package is not available locally, proxy requests to 'npmjs' registry
# proxy: npmjs #这个去掉的话,sinopia 将不去下载依赖包 如果只是要放自己资源仓库的话就去掉
#
# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: sinopia.log, level: info}
# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873 # 默认没有,只能在本机访问,添加后可以通过外网访问。