博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端架构之路(7) - 私有 npm 仓库
阅读量:6640 次
发布时间:2019-06-25

本文共 3939 字,大约阅读时间需要 13 分钟。

私有 npm 仓库

1. “私有 npm 仓库” 有何用

组件化之后,搭建 “私有 npm 仓库” 是个不错选择。

私有 npm 仓库可以让我们使用组件就像 npm 官方仓库里的包一样方便。

一般私有 npm 仓库有以下一些特性:

  • 私有包托管在内部服务器或者单独的服务器上;
  • 可以同步整个官方仓库,也可以只同步需要的;
  • 下载的时候,可以让公共包走公共仓库,私有包走私有仓库;
  • 可以缓存下载过的包;
  • 对于下载,发布,有对应的权限管理。

目前比较好的解决方案有两种:

  1. ()
  2. +

2. ()

在15年的时候就停止更新了,继而由 提供更新升级,所以两者用法基本上都是一致的,以下都以 sinopia 为例说明。

2.1 安装

$ npm install -g sinopia

2.2 配置

配置文件位于 ~/.config/sinopia/config.yaml

# path to a directory with all packagesstorage: /home/{user}/.local/share/sinopia/storage # 库存路径,需要考虑磁盘空间web: # 自定义web项,即浏览器访问页面  title: Sinopiaauth:  htpasswd:    file: ./htpasswd # 添加用户(npm adduser)后自动创建,保存用户信息,可以初始化用户uplinks: # 可以配置多个上游地址,后面packages中的proxy指定用哪个  npmjs:    url: https://registry.npm.taobao.org/ # 更改此上游地址packages: # 包的权限管理,$all为所有人,$authenticated为通过验证人          # 分布和安装两种权限,值可以特指某几人  '@*/*': # 跟package.json中的name属性进行匹配    # scoped packages    access: $all    publish: $authenticated  '*':    access: $all    publish: $authenticated    proxy: npmjslogs:  - {type: stdout, format: pretty, level: http}listen: 0.0.0.0:4873 # 设置监听地址,0.0.0.0匹配本机地址

更多配置参考

2.3 设置 npm registry 属性

$ npm config set registry http://{服务器ip}:4873/

推荐使用 来快速切换 npm registry 配置。

2.4 运行

sinopia

或者使用 永久运行

pm2 start sinopia

现在你就可以发布私有包了。

3. +

sinopia 的优点是配置简单,对环境依赖少(仅 node 就够了),并且支持 windows 系统下运行。

但它也有缺点,主要是以下几点:

  • 权限管理比较弱,对用户权限,发布权限,下载权限控制不是很得心应手;
  • 缓存优化不足,经常会在安装共有包的时候处于挂起状态;
  • 不能做官方仓库的镜像。

所以,sinopia 比较适合个人搭建在本地作为 npm 缓存,这样,安装过的包会直接从缓存中获取,加快安装速度。

对于企业级的应用来说,就需要另外一个解决方案了: +

环境依赖:

  • >= 4.3.1
  • linux(不支持 windows)
  • 数据库(, , MariaDB, PostgreSQL)

3.1 安装

$ npm install -g cnpm$ npm install -g cnpmjs.org

3.2 配置

配置文件位于 ~/.cnpmjs.org/config.json

{  "debug": false, // 是否启动 debug 模式  "enableCluster": true, // 是否启用 cluster 模式  "mysqlServers": [ // 数据库配置,以 mysql 为例    {      "host": "host",      "port": 3306,      "user": "user",      "password": "password"    }  ],  "mysqlDatabase": "cnpmjs", // 数据库名  "enablePrivate": true, // 是否启用私有化,这样只有定义在 `admins` 中的用户才能发布  "admins": { // 管理员配置,可以配置多个    "senntyou": "jiangjinbelief@163.com"  },  "syncModel": "exist", // 同步模式  "scopes": [ // 包前缀,如果不是以这个前缀命名的包将不能发布,可以配置多个    "@test"  ],  "registryHost": "http://your.company.npm.registry.com", // 你的服务器对应的 npm registry 地址  "officialNpmRegistry": "https://registry.npm.taobao.org" // 如果在该仓库中找不到的包,会上游到哪里去找}

更多配置参考

3.3 设置 cnpm registry 属性

$ cnpm config set registry http://your.company.npm.registry.com

3.4 运行

cnpmjs.org start

运行的时候将会开启两个端口:7001(registry),7002(web)。

7001(registry)

用来在命令行发布,下载包等对用的远程 registry 地址。比如一些比较常用的 registry 地址:

  • npm: npm 官方仓库地址
  • cnpm: cnpmjs.org 官方仓库地址
  • taobao: 淘宝 NPM 镜像

用 配置 url 地址到 7001 端口:

server {    listen 80;    listen [::]:80;    server_name your.company.npm.registry.com;    location / {        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://127.0.0.1:7001;    }    location ~ /.well-known {        allow all;    }    client_max_body_size 50m;}

重启 nginx,现在你就可以通过 http://your.company.npm.registry.com 去发布私有包到这个仓库里了(如果没有其他问题的话)。

7002(web)

用来在 web 端查看仓库信息,搜索包,包信息等。比如一些比较常用的地址:

用 配置 url 地址到 7002 端口:

server {    listen 80;    listen [::]:80;    server_name your.company.npm.com;    location / {        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://127.0.0.1:7002;    }    location ~ /.well-known {        allow all;    }    client_max_body_size 50m;}

重启 nginx,现在你就可以通过 http://your.company.npm.com 访问仓库web页面了(如果没有其他问题的话)。

永久运行

如果仅通过 cnpmjs.org start 运行,一旦关闭终端,程序就会停止运行。推荐使用 screen 命令开启永久运行,可以通过 了解下这个命令的用法。

# 创建一个名为 cnpmjs 的窗口$ screen -S cnpmjs# 运行程序$ cnpmjs.org start# 按Ctrl+a,然后再按d,离开当前窗口,而程序不会终止Ctrl+a+d# 重新进入 cnpmjs 的窗口,做更多的操作$ screen -r cnpmjs

4. 后续

上一篇:

下一篇:

参考文章:

更多博客,查看

作者:

版权声明:自由转载-非商用-非衍生-保持署名()

你可能感兴趣的文章
线程池的设计(一):半同步半异步线程池的设计
查看>>
建立JNI层的本地对象,并与JAVA层交互方法
查看>>
剑指offer-面试题3.二维数组中的查找
查看>>
查看/清除DNS解析记录
查看>>
linux命令行计算器
查看>>
python处理中文字符
查看>>
XML Schema的基本语法(转)
查看>>
mysql 数据库连接数的更改
查看>>
系统减肥批处理
查看>>
Centos挂载NTFS格式的移动硬盘
查看>>
sybase集群总结
查看>>
获取语句执行时间
查看>>
mysql字段类型、范围详解
查看>>
MySQL 高可用MMM
查看>>
在ubuntu16.4系统里默认网卡名称enp0s3,如何修改成eth0
查看>>
我的友情链接
查看>>
服务器系统安全防范之浅谈
查看>>
Cisco与Linux的NAT-Linux实现Cisco风格的NAT
查看>>
数组、LIst<> 、 ArrayList的性能对比
查看>>
数据库的超基本操作
查看>>