[转]如何创建私有npm仓库?

admin[转]如何创建私有npm仓库?已关闭评论条评论 513 次浏览

原文地址:如何创建私有npm仓库?

目录

  1. 为什么要使用私有npm仓库呢?
  2. 如何搭建呢?
  3. 如何启动verdaccio呢?

为什么要使用私有npm仓库呢

随着公司业务增加,项目变多,总会有很多复用的业务组件,存在不同项目,所以这个时候就要想如何将这些组件,发布到npm仓库上,让每个项目组的人,通过npm install xxx 直接下载依赖呢。but,又考虑到npm仓库是对外的,所以自己内部的业务组件部署上去不太好,那么就诞生出来了一个概念,就是npm私有仓库。其作用不仅仅是放一些业务组件,你也可以放一些自己的写的库或者公司内部使用的库等!

如何搭建呢?

搭建npm私有仓库方法有多种,这里只介绍一种较为简单的方式,就是采用verdaccio

什么是verdaccio?

Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry
它forked于sinopia@1.4.0并且100% 向后兼容。
Verdaccio 表示意大利中世纪晚期fresco 绘画中流行的一种绿色的意思。
sinopia是最初的搭建私有npm的选择,不过已经好多年不维护了,而verdaccio则是从sinopia衍生出来并且一直在维护中的,所以现在看来,verdaccio是一个更好的选择。

首先全局安装verdaccio:
npm install -g verdaccio

安装完成后: cmd 输入命令: verdaccio

image.png
如图:你可以直接打开http address地址,这就是你的仓库
接下来你要注意的一个文件就是 C:\Users\Administrator\AppData\Roaming\verdaccio\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/verdaccio/verdaccio/tree/master/conf
#

# path to a directory with all packages
storage: D:\verdaccio\storage (缓存路径,最好找一个空间比较大的盘来放,默认是在C 盘)
# path to a directory with plugins to include
plugins: ./plugins

web:
  title: Verdaccio (网站title, 可以随意命名)
  # comment out to disable gravatar support
  # gravatar: false
  # by default packages are ordercer ascendant (asc|desc)
  # sort_packages: asc

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.npm.taobao.org/ (镜像源配置,可以添加多个)

packages:
  '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated
    unpublish: $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/publish packages
    # (anyone can register by default, remember?)
    publish: $authenticated
    unpublish: $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 incoming 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 enough.
server:
  keepAliveTimeout: 60

middlewares:
  audit:
    enabled: true

# log settings
logs:
  - { type: stdout, format: pretty, level: http }
  #- {type: file, path: verdaccio.log, level: info}
listen: http://IP:4873 (需要监听的端口,IP)
max_body_size: 300mb (最大的文件包限制)
#experiments:
#  # support for npm token command
#  token: false

内网配置给其他电脑使用最后加一句 listen: http://0.0.0.0:4873

配置完成后,打开网站http://IP:4873:
页面会提示你去添加账号和发布。BUT,这一步之前你可以先去设置镜像源,这里就会涉及到一个工具叫nrm

什么是nrm呢?

nrm是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换。
首先全局安装nrmnpm install -g nrm
由于上面是我们自己建立的npm 私有仓库,所以我们得添加一个自己的npm 镜像源,添加方式:
nrm add <name> http://IP:4873。add 接收两个变量 <name>镜像源名称 <url> 镜像源url地址,那么如何查看有哪些镜像源呢
nrm ls:

  npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
  taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/
* xxx  http://IP:4873/

列表内已经添加好了自己的npm镜像源,那么关键的一步是切换到添加的镜像源:nrm use xxx,更多nrm命令,请自行谷歌查询。到这里,我们就可以回到我们配置verdaccio步骤去添加账号和发布你的第一个库了。
添加账号:npm adduser --registry=http://IP:4873
发布库或组件:npm publish
更多npm命令,请查看https://cloud.tencent.com/developer/section/1490273
这样你就可以玩转私有npm仓库了!
如果需要发布或者使用官方的npm只要nrm上切换源就可以


更多npm命令,请查看https://cloud.tencent.com/developer/section/1490273
这样你就可以玩转私有npm仓库了!

如何启动verdaccio呢?

  1. 首先安装 pm2 守护进程工具。
  2. 然后使用命令 pm2 start verdaccio,but , 在windows系统下这样是启动不了的,因为在windows系统下verdaccio.cmd它不是有效的,您必须直接运行Node.js命令。
    所以我们应该修改启动命令:pm2 start C:\Users\Administrator\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio --name verdaccio。这样就可以正常启动了。
  3. 如果要查看pm2更多命令,请自行谷歌查询。

最后推一波:
个人博客,欢迎大家前来留言。