搭建NPM私有库

Sinopia已暂停维护,现由verdaccio在它基础上进行更新升级

用verdaccio搭建私有库

https://github.com/verdaccio/verdaccio#readme

搭建一个无需配置的本地npm仓库,你不必安装和复制整个CouchDB数据库。保留自己小的数据库,如果这里的包文件不存在,会询问npmjs.org,它只保留你需要使用的包。

使用方法

  • 使用私有包

如果你想使用所有npm包系统的好处而且不把代码发送到公共系统里,并且使用私有包像公共一样方便。

有关详情查阅私有包章节

  • 缓存npmjs.org注册表

如果你有多个服务器想安装软件包,可以使用此方法减少延迟(慢的npmjs.org只连接到每个包/版本一次)并提供有限故障转移(如果npmjs.org关闭了,我们还可以在缓存里找到可用的包)。

有关详情查阅使用公共包章节

  • 覆盖公共包

如果你想使用一些第三方包的修改版本(例如,你发现一个bug,但是维护者也不接受你的请求),你可以在本地以相同的名字发布你的版本。

有关详情查阅覆盖公共包章节

image

安装

安装并运行(在config.yaml里,应用将创建一个以后也可以编辑的默认配置)

npm install -g verdaccio
verdaccio

npm配置

npm set registry http://localhost:4873/

如果你使用HTTPS, 添加一个适当的CA信息(“null” 的意思从系统获取CA列表)

npm set ca null

现在你可以浏览 http://localhost:4873/, 这里将被列出和被搜索出来的本地包。

服务端配置

在那个目录下运行 verdaccio ,它会在相应目录下创建自己的文件。此文件默认有2个文件(config.yaml和storge),htpasswd在添加用户后才被创建。

  • config.yaml是用来配置访问权限,代理,文件存储路径等所有配置信息的

  • storge 存放NPM包的。

  • htpasswd 保存用户账户、密码等信息。

config.yaml配置文件

运行一个服务时,它自动创建一个配置文件。默认配置文件,它允许所有用户做任何事,所以不要在生产环境使用它。

# 存储NPM包的路径
storage: /Users/luckytien/.local/share/verdaccio/storage


auth:
  htpasswd:
    #保存用户账户、密码等信息文件
    file: ./htpasswd
    # 允许注册的最大用户数, 默认是无限制
    # 如果是-1, 禁止注册
    #max_users: 1000

# 我们可以访问已知的其他存储库列表,用于请求资源不存在,根据此处配置地址请求其他服务器
uplinks:
  npmjs:
    url: https://registry.npmjs.org/    //默认为npm官网,可以在此修改成其他源地址
    
# 配置权限管理
packages:
  '@*/*':
    # 范围包
    access: $all                       // 用户对匹配的项目进行安装
    publish: $authenticated             // 用户对匹配的项目进行发布

  '*':
    # 允许所有用户(包括没有验证的用户)读取和发布所有包
    #
    # 可以指定用户名/组名(取决于你的插件)
    # 3个关键字: "$all", "$anonymous", "$authenticated"
    # $all表示所有人
    # $anonymous表示匿名者
    # $authenticated表示只通过验证的人可以执行对应操作
    access: $all

    # 允许所有已知用户发布包(默认任何人都可以注册)
    publish: $authenticated

    # 如果本地没有可用的私有包,代理会请求'npmjs'仓库
    proxy: npmjs

# 日志设置
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: verdaccio.log, level: info}

注册一个新的用户

npm adduser --registry http://localhost:4873/

这将提示输入用户名、密码、邮箱并将这些用户凭证保存在服务里。

注意:添加新用户之前,切换到对应的源。

使用私有软件包

添加用户和用户访问软件包的管理权限。

推荐为你的私有包定义一个前缀,例如“local“,所以你所有私有包都将像这样:“local-foo”。此方法可以清楚的分离公共包和私有包

使用npmjs.org公共包

如果一些包在存储中不存在,服务器就会去尝试从npmjs.org获取它。如果npmjs.org关闭了,此服务就从缓存中获取可用的包。它只下载所需要的包(相当于通过客户端请求),并且这些信息将被缓存。所以如果客户端重复请求同样的包,它可以直接提供包,而不用再请求npmjs.org。

例如:如果你成功的从这台服务器获取过express@3.0.1一次,哪怕npmjs.or关闭了,你也能够在任何时候再次获取它(和它的所有依赖)。但是会提示express@3.0.0不会被下载直到它被人实际需要。如果npmjs.org离线,此服务器会提示只有express@3.0.1是被发布的(相当于只在缓存从获取)。

覆盖公共包

如果你想使用一些公共包 foo 的修订版本, 你仅能发布它到你本地服务器里,所以当你输入npm install foo ,它将会考虑安装你的版本。

这里有2个选项:

  1. 创建单独fork和停止与公共版本同步

    如果你想这么做,你应该修改你的配置文件,因为它不再向npmjs发送此请求。为这个包添加单独的配置到 config.yaml,并且从 'proxy_access' 列表移除 npmjs, 然后重启此服务。

    当你发布你的本地包时,首先版本字符串要比现有版本高,因此它在缓存里与现有版本不会冲突。

  2. 想暂时使用你的版本,但是公共包更新的与它一样就使用公共包。

    为了避免版本冲突,你可以使用下一个补丁版本的自定义预发布后缀。例如,如果一个公共包版本是 0.1.2 ,你可以发布 0.1.3-my-temp-fix。此方式你的包将被使用直到他的原始维护者更新它的公共包到0.1.3

兼容性

自动支持标准的npm客户端的所有功能,这些客户端在私有仓库中支持是有意义的。可惜的是,他不能一直支持。

基本功能:

  • 安装包(npm install,npm upgrade等)- 支持
  • 发布包(npm publish)- 支持

高级包控制:

  • 取消发布包(npm unpublish)- 支持
  • 标记包(npm tag)- 尚未支持,不久会支持
  • 弃用包(npm deprecate)- 不支持

用户管理

  • 注册新用户(npm adduser {newuser})- 支持
  • 转让拥有权(npm owner add {user} {pkg})- 不支持,用它自己的acl管理系统

其他信息

  • 搜索包(npm search)- 浏览器支持,不支持命令行
  • 关注包(npm star, npm unstar)- 不支持,在私有仓库中是无意义的

现有类似服务和方法

  • npm+git(git+ssh://dependencies)- 许多人这么用,但是有个麻烦问题,npm update 不能更新,不能以这种方式用git子目录等。
  • reggie - 这看起来确实非常有趣。可以借用一些代码。
  • shadow-npm,public service - 它使用了与npmjs.org相同的代码。
  • gemfury和其他服务 - 这些都是闭源的云服务。
  • npm-registry-proxy,npm-delegate,npm-proxy。 - 这些只是代理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容