2020你需要一个自己的私有npm包管理器

简介: 2020你需要一个自己的私有npm包管理器

微信图片_20220520194943.png

概述


随着我们技术的积累,在工作和学习中时常会写一些复用的工具,我们想分享给公司其它同事使用或者公司可能会有一个公共组件仓库,但这些工具或者组件都涉及公司内部的机密,公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件、模块和项目。对于前端,我们最熟悉的莫过于 npm,bower 等;但是 bower 的市场兼容性明显没有 npm 强壮,加之 commonjs 规范的日益成熟。npm 应该是前端包管理的不二选择。这时我们就可以搭建一个 npm 私服,只在公司局域网访问,我们可以将我们写好的工具发布到上面,方便其它同事安装使用。当访问到本地 npm 没有的时,verdaccio 会根据设置的远程仓库路径下载(远程仓库可以通过配置文件修改),之后将下载完成的包缓存到本地,当下一次安装同样的包时就可以直接从本地缓存获取了。

私服工作要求


  • 可以不用向npm付费,而且东西放在别人服务器上相对没有自己电脑安全;
  • 私有包托管在内部服务器中,只在内部使用,并且还想可以配置相应的权限;
  • 项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包;
  • 下载时,公共包走公共仓库,私有包走内部服务器的私有仓库;
  • 服务器硬盘有限,希望只缓存下载过的包,而不是全部同步;
  • 对于下载,发布 npm 包有对应的权限管理,安装方便,配置简单,依赖少;
  • npm 上的包下载很慢,把已经下载过的包缓存在服务器上,下次下载时首先检查更新,如果没更新直接走缓存;
  • 比git方便,也符合大家的习惯;

常用搭建工具


工具名称 说明
nexus nexus 功能强大,但是部署和配置较繁琐
cnpm cnpm 虽然比 nexus 配置简单,但是也需要使用到 mysql
verdaccio verdaccio 使用文件存储包数据,无需安装数据库并且部署简单,只需要一行代码就可以部署完成
sinopia sinopia不维护了

工作原理


微信图片_20220520195349.png

Verdaccio 搭建私有 NPM


简介


Verdaccio 是一个简单的零配置的node.js轻量私有的npm代理仓库 (npm proxy registry), forked 于 sinopia@1.4.0。是几个意大利籍的巴西程序员,基于Sinopia开发的轻量级npm代理源。

特点


  • 与 yarn, npm 和 pnpm 100% 兼容
  • 开源免费、稳定
  • 提供 Docker 和 Kubernetes 支持,相当容易安装和使用
  • 发布的包是私有的并且访问权限可配置
  • Verdaccio 按需要缓存所有相关项,并在当地或私有网络下可以加速安装
  • 缓存npmjs.org仓库,使用组件时,通过内网下载更快
  • 私有仓库
  • 链接多个仓库
  • 覆盖公共软件包
  • 端到端测试
  • 有利于技术、知识的沉淀

环境


  • node   verdaccio@3.x Node >= v6.12 | verdaccio@4.x Node >= v8.x
  • npm    官方强烈推荐包管理器版本 > npm@5.x | yarn@1.x | pnpm@2.x
  • verdaccio
  • pm2
  • nrm
  • web 应用支持浏览器 Chrome, Firefox, Edge 和 IE11 browsers以上

安装


1. node安装


Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境,这样JavaScript 的运行可以不用依赖浏览器。


配置node 环境变量


  1. 查看nodejs全局安装路径:npm config ls其中 prefix 的路径就是 nodejs全局安装路径。
  2. 将 nodejs全局安装路径 配置到环境变量中即可。


2. npm安装


NPM是JavaScript的包管理工具。安装Node.js后,已包含了NPM。


3. verdaccio安装


注:Verdaccio 支持多种安装方式,甚至包含charts包

安装有可以docker、也可以npm|yarn,我们使用npm安装(以管理员身份运行)

$ npm install -g verdaccio --unsafe-perm
or
$ yarn global add verdaccio --unsafe-perm

这时候完成后可能会提示木有python环境,可以忽略。

4. pm2安装


1. 命令行安装


$ npm install -g pm2
或者
$ yarn global add pm2

5. nrm安装


1. 命令行安装


$ npm install nrm -g
或者
$ yarn global add nrm

2. 配置环境变量


  1. 查看nodejs全局安装路径:npm config ls其中 prefix 的路径就是 nodejs全局安装路径。
  2. 将 nodejs全局安装路径 配置到环境变量中即可。新建一个变量(“NRM_PATH”),路径为 nodejs全局安装路径(我这里值为“D:\Program Files\nodejs\node_global”)。
  3. 将 刚刚创建的环境变量,添加到 系统 path 路径中(%NRM_PATH%) 。
  4. 至此重启cmd,配置生效。

启动


$ verdaccio

启动后会出现配置文件路径,及访问的链接

warn --- config file  - /root/.config/verdaccio/config.yaml
 warn --- Plugin successfully loaded: htpasswd
 warn --- Plugin successfully loaded: audit
 warn --- http address - http://localhost:4873/ - verdaccio/

配置


1. 修改


     CentOS: 修改配置文件,在/root/.config/verdaccio/config.yaml

    Windows:  $ vim  C:\Users\admin\AppData\Roaming\verdaccio\config.yaml

里末尾添加

listen:
          0.0.0.0:4873

注意: 请保证4873端口可访问,避免防火墙拦截


2. 权限配置


在当前用户的 .config/verdaccio 下默认有两个文件:config.yamlhtpasswd。这里介绍两个比较重要的配置项,其他的可以官网上查询。

一般团队或者公司的私有项目,会采用不同的权限控制。

操作权限:

  • access 表示哪一类用户可以对匹配的项目进行安装(install)
  • publish 表示哪一类用户可以对匹配的项目进行发布(publish)
  • proxy 如其名,这里的值是对应于 uplinks 的

组权限:

  • $all 表示所有人都可以执行对应的操作
  • $authenticated 表示只有通过验证的人可以执行对应操作
  • $anonymous 表示只有匿名者可以进行对应操作(通常无用)

代码如下:

packages:
  # scoped 包
  '@scope/*':
    access: $all
    publish: $all
    proxy: server2
  'supersecret-*':
    # 添加多个组
    access: secret super-secret-area ultra-secret-area
    publish: secret ultra-secret-area
    proxy: server1
  'private-*':
     # private-xxx 允许所有的用户安装、认证的用户发布
    access: $all
    publish: $authenticated
    proxy: uplink1
  'old-*':  # 不设置 `access`、`publish` 阻止对一组包的访问(不设置proxy阻止代理一组特定包)
  '**':
    # 允许所有用户 (包括为验证的用户) 安装和发布
    access: $all
    publish: $all
    proxy: uplink2

3. 权限配置


因为是私有源,我们可以设置 config.yaml 中的 max_users: -1 来禁用 npm adduser 命令来创建用户。如果需要添加用户这里介绍两种方法:

$ npm install htpasswd-for-sinopia -g
 $ sinopia-adduser # 在 htpasswd 目录下执行

部署


1. 使用pm2启动常驻后台
$ pm2 start verdaccion
复制代码

注意:verdaccion不支持pm2cluster方式,如果这种方式启动会出现未知的异常


访问



在浏览器中打开xx.xx.xx.xx:4873,如果能正常访问则说明搭建成功了

切换nrm源


1. 添加npm源
$ nrm add 新源名称  http://xx.xx.xx.xx:4873
复制代码
2. 查看npm源
$ nrm ls
复制代码
3. 使用npm源
$ nrm use 新源名称

发布私有包



$ npm adduser --registry http://xx.xx.xx.xx:4873
$ npm login --registry http://xx.xx.xx.xx:4873
$ npm publish --registry http://xx.xx.xx.xx:4873
$ npm profile set password --registry http://xx.xx.xx.xx:4873


安装发布的npm包


方法一
$ npm set registry http://xx.xx.xx.xx:4873
$ npm install <你的包名> 
方法二
$ npm install <你的包名> --registry=http://http://xx.xx.xx.xx:4873



目录
相关文章
|
10月前
|
Web App开发 缓存 JavaScript
2020你需要一个自己的私有npm包管理器
2020你需要一个自己的私有npm包管理器
167 0
|
9月前
|
存储 缓存 资源调度
你真的知道 NPM、Yarn 与 PNPM 这三个前端包管理器之间的区别吗?
【6月更文挑战第9天】NPM、Yarn和PNPM是主流前端包管理器,各有特色。NPM生态庞大,易用但速度慢;Yarn速度快,依赖管理稳定;PNPM性能优异,节省磁盘空间。Yarn和PNPM在速度和确定性上胜出,NPM因广泛使用和丰富资源领先。开发者可根据项目需求和喜好选择,三者共同推动前端开发进步。
192 8
|
10月前
|
缓存 JavaScript 前端开发
深入剖析NPM: Node包管理器的介绍和使用指南
深入剖析NPM: Node包管理器的介绍和使用指南
141 0
|
存储 JSON 资源调度
NPM 包管理器简介
NPM 包管理器简介
|
JavaScript 前端开发 开发工具
前端工程化的Node.js之代码的组织/部署的包管理器 npm
在前端开发中,代码的组织和部署是非常重要的一环。为了提高开发效率和代码质量,我们需要使用工程化的方式来管理和组织代码。其中一个非常重要的前端工具就是 Node.js,而在 Node.js 中最为关键的工具之一就是包管理器 npm。
154 0
|
JavaScript 前端开发 程序员
前端开发:node.js的node包管理器npm安装以及使用
在前端开发过程中,node.js进行包管理的时候会使用npm管理器来操作。npm(node package manager)包管理器,主要是用于第三方模块的下载、安装和管理,它具有强大的第三方资源,重要程度不言而喻。
542 0
前端开发:node.js的node包管理器npm安装以及使用
|
JavaScript 前端开发 Java
微服务项目:尚融宝(12)(前端平台:NPM包管理器)
2020年3月17日,Github宣布收购npm,GitHub现在已经保证npm将永远免费。
微服务项目:尚融宝(12)(前端平台:NPM包管理器)
|
缓存 资源调度 JavaScript
yarn - 一个可能取代 npm 的新型包管理器 [Facebook 出品,附带中文使用教程]
仅仅一夜,却也是无数个日夜,FaceBook 开源了 yarn 这个新的 JavaScript 包管理工具, 这个和 Exponent, Google, 以及 Tilde 合作完成的项目。 官网 | Github Repo yarn出现的缘由 — 解决npm历史遗留的痛点
188 0
|
机器学习/深度学习 JavaScript 前端开发
前端培训-中级阶段(45)- Node10.x环境搭建,NPM包管理器
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 上节课我们了解到了一个可以在本地执行 js 的 javascript 执行环境:NodeJS。今天我们来安装 NodeJS、环境配置、NPM 使用、版本管理。 推荐使用 node 10.x 版本(2018年,最新是 10.22.1),下文我们基于 v10.16.0 版本。
237 0
前端培训-中级阶段(45)- Node10.x环境搭建,NPM包管理器
|
存储 缓存 资源调度
细说包管理器yarn和npm
在过去,一个简单的文本编辑器就足以让开发人员创建和管理大部分项目。但从那以后,WEB发生了翻天覆地的变化,如今,即使是一个相当简单的项目,通常也会有成百上千个带有复杂嵌套依赖关系的脚本,如果没有自动化工具,这些脚本根本无法有序的管理,这时就需要包管理器。
256 0

热门文章

最新文章

推荐镜像

更多