原因
我搭私库的原因很简单,目前正在开发一个组件库,提供给公司内部使用,我不想去注册 npm,也不想等待 npm 的审核,只想要有个仓库快速测试发布自己的 npm 包。
怎么搭
目前最方便的方案就是 verdaccio,搭建非常方便,一般就几分钟就搞定了,需要的工具:
- 安装 nodejs 和 npm
- 全局安装 verdaccio
- shh 和 pm2(非必须,如果你要部署到远程服务器的话)
接下来详细介绍搭建的步骤。
全局安装 verdaccio
安装 verdaccio 之前,我默认大家都已经安装了 nodejs 和 npm 环境,这个就不再赘述了。如果是本地搭建的话,直接进行下面的操作就可以了。如果是在远程服务器搭建,通过 ssh 连接远程服务器就行。
# 全局安装
npm install verdaccio - g
修改 verdaccio 配置
修改配置的目的就是让我们的私库可以通过公网的 ip 访问,首先查看 npm 全局安装包的所在位置:
npm root -g
/usr/local/Cellar/node/8.4.0/lib/node_modules
其中 /usr/local/Cellar/node/8.4.0/lib/node_modules 便是我们 npm 包全局安装的地址。按以下命名查找配置文件所在的位置
然后
vim default.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/verdaccio/verdaccio/tree/master/conf
#
# path to a directory with all packages
storage: ./storage
# path to a directory with plugins to include
plugins: ./plugins
web:
# WebUI is enabled as default, if you want disable it, just uncomment this line
#enable: false
title: Verdaccio
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
# a list of other known repositories we can talk to
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated
proxy: npmjs
'**':
# 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
# You can specify HTTP/1.1 server keep alive timeout in seconds for incomming connections.
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enought.
server:
keepAliveTimeout: 60
# To use `npm audit` uncomment the following section
middlewares:
audit:
enabled: true
# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: verdaccio.log, level: info}
# listen
listen: 0.0.0.0:4873
最后一行为新增的配置, 用于支持外网 ip 访问
listen: 0.0.0.0:4873
然后输入 :wq 保存并退出 vim 模式,启动 verdaccio 服务即可。我一般会通过 pm2 启动,原因很简单,关闭 doc 窗口后,服务不会停掉,并且能很好的管理我们启动的服务。
使用 pm2
常用命令
- 安装:npm install pm2 -g
- 启动:pm2 start verdaccio
- 停止:pm2 stop verdaccio
- 重启:pm2 restart verdaccio
- 删除应用:pm2 delete verdaccio
- 查看日志:pm2 logs verdaccio
我们来启动服务,查看效果:
pm2 start verdaccio
至此,npm 的私库搭建就完成了,图中是我最新发布的一个基于 vue 的组件库,后续会对组件库的编写和发布做介绍,有兴趣的朋友关注以下。