Hibop / Hibop.github.io

Hibop 个人博客
https://hibop.github.io/
23 stars 1 forks source link

关于npm正确打开姿势——镜像代理、配置注册、版本号、script #40

Open Hibop opened 6 years ago

Hibop commented 6 years ago

npm获取配置有6种方式,优先级由高到底

  1. 命令行参数。 --proxy http://server:port即将proxy的值设为http://server:port

  2. 环境变量。 以npm_config_为前缀的环境变量将会被认为是npm的配置属性。如设置proxy可以加入这样的环境变量npm_config_proxy=http://server:port

  3. 用户配置文件。可以通过npm config get userconfig查看文件路径。如果是mac系统的话默认路径就是$HOME/.npmrc。

  4. 全局配置文件。可以通过npm config get globalconfig查看文件路径。mac系统的默认路径是/usr/local/etc/npmrc。

  5. 内置配置文件。安装npm的目录下的.npmrc文件。

  6. 默认配置。 npm本身有默认配置参数,如果以上5条都没设置,则npm会使用默认配置参数。

npm镜像设置:

常用镜像:

default

npm set registry  https://registry.npm.taobao.org
// 或者
npm config set registry  https://registry.npm.taobao.org

// 验证
npm config list

npm 版本号:

语义化版本(Semantic Versioning)命名方式, 简称 SemVer。

<major>.<minor>.<patch>-<stage>.<num>

版本号范围(version range)

私有镜像搭建:

工具: sinopia verdaccio 搭建内网私有镜像,一般逻辑流程: default

verdaccio&sinopia搭建私有镜像的采坑之路:

由于sinopia的作者已于二年前停止对sinopia的维护和升级,所以出来了一个sinopia的fork,名字叫做Verdaccio,然后由Verdaccio继续对sinopia进行更新和维护,具体如何使用Verdaccio来构建私有npm服务器。sinopia可以修改源码,Verdaccio跑起来的是编译后的包,改完源码需要自己编译。

主要记录下使用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 代理

npm config set proxy http://server:port
npm config set https-proxy http://server:port

代理需要认证的话

npm config set proxy http://username:password@server:port
npm config set https-proxy https://username:password@server:port

取消代理

npm config delete proxy
xuiwife commented 5 years ago

我是用sinopia搭建的 然后遇到了@符号的问题 可是没有找到sinopia/lib/up-storage.js这个文件呢 你有找到过这个文件吗

hoasou commented 3 years ago

npm获取配置有6种方式,优先级由高到底,5的优先级比3和4的高吧,用户项目内.npmrc > 用户目录.npmrc > 全局.npmrc

hoasou commented 3 years ago

实测发现,还有一种优先级比3、4、5更高的配置方式,npm install --registry=http://xxx