以上是网络没有被限制的情况,很友好很友好,第二次下载的速度也是很快。然鹅,这个私库是要部署到服务器上的,网络是被限制的,要访问的IP只能申请,批准了才能开,申请了registry.npm.taobao.org的IP,但是有些依赖包是从cdn.npm.taobao.org上下载,不能访问cdn.npm.taobao.org就会报internal server error和uplink is offline的错误。这就真没法申请那么多IP访问了,所以!!!只能离线!!!把需要的依赖包的安装包缓存起来,放在服务器上的/verdaccio/storage中,就可以完美实现离线安装了。
具体实现:在无网络限制的电脑中安装verdaccio,并把npm的registry连接到verdaccio(例如:npm config set registry=http://localhost:4873,或者使用nrm),**先清除npm缓存(npm cache verify),在还未安装依赖包的项目中npm install**,成功后,把/verdaccio/storage整个拷贝到服务器的verdaccio/storage。
至此,可以成功连接服务器上的私库下载依赖包了。
npm获取配置有6种方式,优先级由高到底
命令行参数。 --proxy http://server:port即将proxy的值设为http://server:port。
环境变量。 以npm_config_为前缀的环境变量将会被认为是npm的配置属性。如设置proxy可以加入这样的环境变量npm_config_proxy=http://server:port。
用户配置文件。可以通过npm config get userconfig查看文件路径。如果是mac系统的话默认路径就是$HOME/.npmrc。
全局配置文件。可以通过npm config get globalconfig查看文件路径。mac系统的默认路径是/usr/local/etc/npmrc。
内置配置文件。安装npm的目录下的.npmrc文件。
默认配置。 npm本身有默认配置参数,如果以上5条都没设置,则npm会使用默认配置参数。
npm镜像设置:
常用镜像:
npm 版本号:
语义化版本(Semantic Versioning)命名方式, 简称 SemVer。
版本号范围(version range)
私有镜像搭建:
工具: sinopia verdaccio 搭建内网私有镜像,一般逻辑流程:
verdaccio&sinopia搭建私有镜像的采坑之路:
主要记录下使用verdaccio的坑:
下载带@ 符号的包都下载失败,比如下载 @angular/core,下载失败bug 查阅了一些资料,发现这其实是Sinopia自己的bug,bug产生的原因就是:sinopia在代理到npmjs.org公有库时将@符号转码为%40,致使在公有库中找不到对应的包,返回404 ,简单点说就是 @angular/core 代理请求的时候被转换成了 %40angular/core,所以我们需要在代理请求发出之前将其转回 @angular/core。修改sinopia源码:修改位于sinopia/lib/up-storage.js文件第10行:将var encode = encodeURIComponen;,更改为:var encode = function(thing) {return encodeURIComponent(thing).replace(/^%40/, '@');}; ,这段代码的含义就是将%40转回@,于是就解决了不能下载带有@符号的npm包的bug。
解决方案
现有类似服务和方法
npm 代理
代理需要认证的话
取消代理