Windows下的多版本node相关知识

1,596 阅读50分钟

Windows下的多版本node相关知识

因多次修改未通过,我重新发布了原来的文章

编写时间:2019-06-24
更新时间:2021-07-22 00:38

作者:鬼小妞

目的:本文旨在给小白

简介:在此文中,你可以快速了解什么是node.js理解Node.js的版本发布node版本管理方案以及方案之间的区别n、nvm、nvmw、nvm-windows之间的区别

备注: 本文整理及编写了与node安装相关的一些知识,仅供参考,描述不当的地方,请评论指正,也期待你参与编写

状态:更新完毕,待完善2021-07-22

[TOC]

Node.js官网

JavaScript、Node.js与V8的关系

请点击引用的原文JavaScript、Node.js与V8的关系 对于了解Node的开发人员,我们都知道Node是基于Chrome V8引擎开发的能使JavaScript在服务器端运行的运行时环境(runtime environment)。一方面,它提供了多种可调用的API,如读写文件、网络请求、系统信息等。另一方面,因为CPU执行的是机器码,它还负责将JavaScript代码解释成机器指令序列执行,这部分工作是由V8引擎完成。

一、node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

1.1 什么是node.js

  • 它是一个Javascript运行时环境
  • 依赖于Chrome V8引擎进行代码解释
  • 轻量、可伸缩,适于实时数据交互应用

node.js是一个JS运行时环境(简单来说就是可以解析、执行js代码):不是一门语言/库/框架。其实就是学Web服务器开发,node.js使用javasctipt进行编程,运行在JavaScript引擎上( Chrome V8),不像其他语言,要运行在服务器端(apache,Naginx,iis tomcat)等其他http服务器上。它不用建设在任何服务器软件之上。Node.js的设计理念与经典的LAMP架构(LAMP=Linux + Apache+ Mysql+php)有着很大的不同,可以提供强大的伸缩能力。

  • (1)Node.js中的JavaScript没有BOM、DOM,只有EcmaScript(基本语法),因为服务端不操作页面
  • (2)在Node这个javascript执行环境中为js提供了一些服务器级别的操作API(文件读写、构建网络服务、网络通信、http服务器等)

1.2 node.js特性

  • node.js特性(解决服务器高性能瓶颈问题):
    • 单线程
    • 非阻塞I/O(简单来讲就是异步)
    • 事件驱动
  • 跨平台

首先,如果想了解清楚node.js的特性你可能需要先了解js中: 同步&异步 线程&进程事件循环、宏任务、微任务

单线程

在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。

Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。另外,单线程带来的好处,还有操作系统完全不再有线程创建、销毁的时间开销,单线程cpu的利用率永远是百分之百。坏处,就是一个用户造成了线程的崩溃,整个服务都崩溃了,其他人也崩溃了。

多线程、单线程的一个对比:

也就是说,单线程也能造成宏观上的“并发”。

单线程本身来说,存在如下几个弱点:

1、无法利用多核CPU 2、错误会引起整个应用退出,应用的健壮性需要考虑 3、大量计算占用CPU将使阻塞程序的运行 严格来说,Node并非真正的单线程架构,Node自身还有一定的I/O线程存在,这些I/O线程由底层libuv处理,这就意味着Node在访问系统I/O时还是多线程的,对于文件读取、SQL查询、网路请求这些具体操作,Node还是使用多线程来进行处理从而保证Node的处理效率。

为了应对单线程存在的CPU利用率问题,Node采用了多进程的架构,也就是著名的Master-Worker模式,又称主从模式,如下图所示,这种典型的用于并行处理业务的分布式架构具有较好的伸缩性和稳定性。Node通过fork()复制的进程都是一个个独立的进程,这个进程中有着独立的V8实例,每个独立进程需要至少30毫秒的启动时间和至少10MB的内存,虽然fork()进程是有一定开销的,但是可以提高多核CPU的利用率,这在CPU普遍多核化的今天还是有很大的作用的,同时我们也应该认识到Node通过事件驱动的方式在单线程上已经可以解决大并发的问题,启动多进程只是为充分利用CPU资源。

Node的Master-Worker多进程模式中主进程和工作进程通过消息传递的形式而不是共享或直接操作资源的方式进行通信,通过fork()创建工作进程之后会在主进程和工作进程之间创建IPC通道,关于多进程相关内容,Node官方提供了cluster模块对进程进行管理,相关内容可参考cluster。

关于应用的健壮性问题,我们同样可以采用上述的Master-Worker模式,主进程只负责管理工作进程,具体的业务处理交由工作进程来完成,在工作进程中监听uncaughtException事件可以捕获未知的异常,然后告知主进程,主进程根据策略重新创建工作进程,或者直接退出主进程,这种情况代码中一定要给出足够的日志信息,通过日志监控任务及时产生报警。

非阻塞I/O non-blocking I/O

例如,当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。

由于Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中(事件队列),从而提高了程序的执行效率。

当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环(even loop),不断的检查(事件队列里)有没有未处理的事件,依次予以处理。

阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个单线程的CPU核心利用率永远是100%。所以,这是一种特别有哲理的解决方案:与其人多,但是好多人闲着;还不如一个人玩命,往死里干活儿。

事件驱动event-driven

在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。

Node.js底层是C++(V8也是C++写的)。底层代码中,近半数都用于事件队列、回调函数队列的构建。用事件驱动来完成服务器的任务调度,这是鬼才才能想到的。针尖上的舞蹈,用一个线程,担负起了处理非常多的任务的使命。

node.js特性之间的关系

单线程,单线程的好处,减少了内存开销,操作系统的内存换页。

如果某一个事情,进入了,但是被I/O阻塞了,所以这个线程就阻塞了。

非阻塞I/O, 不会傻等I/O语句结束,而会执行后面的语句。

非阻塞就能解决问题了么?比如执行着小红的业务,执行过程中,小刚的I/O回调完成了,此时怎么办??

事件机制,事件环,不管是新用户的请求,还是老用户的I/O完成,都将以事件方式加入事件环,等待调度。

说是三个特点,实际上是一个特点,离开谁都不行,都玩儿不转了。 Node.js很像抠门的餐厅老板,只聘请1个服务员,服务很多人。结果,比很多服务员效率还高。 Node.js中所有的I/O都是异步的,回调函数,套回调函数。

跨平台

Node刚发布的时候,只能在Linux平台上运行,后来Node在架构层面进行了改动,在Node和操作系统之间引入了一层libuv,从而实现跨平台。 跨平台指的是PC端、移动端、Web/H5


1.3 使用Node.js的优缺点及解决方案

优点

Node.js的特性也就是它的优点,总结起来就是

  • 高并发(最重要的优点)
  • 适合I/O密集型应用

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

关于高并发(),了解更多,请点击以下链接:

缺点

正是Node.js的特性,所以它也因此存在很多缺点

  • 1、不适合CPU密集型应用
    • CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
    • 解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
  • 2、只支持单核CPU,不能充分利用CPU
  • 3、可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
    • 原因:单进程,单线程
    • 解决方案: (1)Nginx反向代理,负载均衡,开多个进程,绑定多个端口; (2)开多个进程监听同一个端口,使用cluster模块;
  • 4、开源组件库质量参差不齐,更新快,向下不兼容
  • 5、Debug不方便,错误没有stack trace

1.4 适合Node的领域

  • 互联网
  • E-Commerce电子商务
  • 支付处理
  • 社交媒体
  • 实时服务
  • 媒体
  • 企业Web服务
  • ...更多请看下文node.js适用场景

1.5 Node.js适合用来开发什么样的应用程序呢?

node.js善于I/O不善于计算,因为node最擅长的就是任务调度,如果你的业务哟很多的CPU计算,实际上也就是相当于这个计算机阻塞了这个单线程,就不适合node开发 当应用程序需要处理大量并发的I/O(异步操作)、而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,node非常适合。node.js也非常适合与Web socker配合,开发长连接的实时交互应用程序。比如:

  • 用户表单收藏
  • 考试系统
  • 聊天室
  • 图文直播
  • 提供json的API(为前台Angular使用)

如果你理解了js内存运行程序的事件队列,执行栈,异步这些特性与原理,你就可以轻松判断什么时候适合用node.js开发。对上面问题的回答,如果以执行栈和事件队列来分析的话,就是: 线程必须先处理完执行栈中的任务,才会把事件队列里队首的事件放到执行栈中,等这个任务完成后,再去事件队列里取队首的任务放到执行栈中,循环往复,直到事件队列事件为空。如果在发送一个异步请求的之前,执行栈有很多任务,事件队列就必须要排队一段时间,排队时间太长,就不适合用node来开发,而实际上,基本上大多数的项目,都会用到node.js。

1.6 适合Node.js的场景

好了,理解完node.js适合用来开发什么样的应用程序之后,我们来看看适合NodeJS的场景有哪些:

RESTful API

这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。

统一Web应用的UI层

目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。 不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是通过Ajax异步获取的还是通过刷新页面。

大量Ajax请求的应用

例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。  总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

Node.js的若干使用场景举例:

  • 网站(如express/koa等)
  • im即时聊天(socket.io)
  • api(移动端,pc,h5)
  • HTTP Proxy(淘宝、Qunar、腾讯、百度都有)
  • 前端构建工具(grunt/gulp/bower/webpack/fis3…)
  • 写操作系统(NodeOS)
  • 跨平台打包工具(PC端的electron、nw.js,比如钉钉PC客户端、微信小程序IDE、微信客户端,移动的cordova,即老的Phonegap,还有更加有名的一站式开发框架ionicframework)
  • 命令行工具(比如cordova、shell.js)
  • 反向代理(比如anyproxy,node-http-proxy)
  • 编辑器Atom、VSCode等

可以说目前大家能够看到的、用到的软件都有Node.js身影,当下最流行的软件写法也大都是基于Node.js的,比如PC客户端luin/medis采用electron打包,写法采用React+Redux。在未来,Node.js的应用场景会更加的广泛。更多参见github.com/sindresorhu…

1.7 不适合Node.js的场景

  • 1.计算密集型应用
  • 2.单用户多任务的程序
  • 3.逻辑十分复杂的事务
  • 4.unicode与国际化

二、为什么要安装多版本Node.js

2.1 谈谈安装的多版本Node.js

首先,在回答这个问题之前,建议先看一下Node.js的发展历史,不过,现在你已经不需要考虑这个类型的多版本安装了,也不需要思考,开发使用io.js还是node.js。因为现在io.js和node.js合并了,详情查看和解方案Reconciliation Proposal 。不过,我们还是要明白在合并之前为什么需要考虑安装多版本node.js。 在io.js和node.js合并之前,我们 通常使用:

  • 社区版——io.js
  • 官网版——node.js

两者都是基于V8引擎开发的 现在,我们只需要考虑安装的版本是奇数版本还是偶数版本,是LTS版本还是Current版本,请阅读本文章节2.2 安装多版本的原因

多版本是指:

  • 1.在io.js和node.js合并之前,安装多版本Node.js,其实就是安装io.js和node.js。因为io.js有很多新特性,而node.js是属于稳定性的版本,很多新特性node.js是不支持。社区版的版本更新非常快有很多新特性,但是很多项目的环境不支持这些新特性,所有有时需要在io.js和node.js之间切换,就需要安装io.js和node.js。

  • 2.现在,我们只需要考虑安装的版本是奇数版本还是偶数版本,是LTS版本还是Current版本 一般来说,我们安装官网推荐的两个版本:LTS版本和Current版本,所以以后的多版本,我们一般都指官网上提供的LTS版本和Current版本。

  • 3.多版本可能是有两个版本,也可能是两个以上的版本

2.2 io.js

io.js(JavaScript I/O)是兼容 NPM 平台的 Node.js 新分支,由 Node.js 的核心开发者在 Node.js 的基础上,引入更多的 ES6 特性,它的目的是提供更快的和可预测的发布周期。

2.2.1 io.js目标

  • 持续集成
  • 100% 测试通过作为正常状态
  • 严格的 SemVer-compliant 版本
  • 提交者版权所有,脱离公司控制
  • 透明的追求共识的管制。
  • 每周发布
  • 支持V8版本
  • 活跃的开发
  • 可预期的路径
  • 社区结盟 由于io.js和node.js已经合并了,所以io.js也已经叫node.js。所以io.js和node.js 两者的官网是一样的。

2.3 安装多版本的原因

在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的 NodeJS 运行环境

而LTS代表了一个被不断修正与改进的版本,包含Node.js平台的最新特性。有时候我们的项目中需要到的环境不支持node的新特性,那么就需要切换到LTS版,如果同时,你又想要研究新特性,那么就需要current版本。

三、理解Node.js的版本发布

Node.js 的发布是 以时间的流逝为准,在保证兼容性靠拢的前提下跳版本 ,而不是以兼容性和新特性的多少为准,这也解释了为什么 Node.js 的版本看上去跳得那么快

越来越多开发人员选择Node.js作为开发平台。但是由于Node.js版本众多,对于新手选择什么版本,如何选择成为一个问题。本文初略介绍一下Node.js的版本发布规律,作为新手选择版本的参考。注意,本文的介绍的内容只是辅助解决选择版本的首先需要面对的一个问题,而不是全部的

3.1 Node.js的发布流程

你可以去官网上的关于版本发布的信息,为了方便了解以下是我今日(2019-6-24)在官网上的版本发布概览信息图:

注意以下说明是当前流程,在Node.js过去的演进过程中可能存在不同的方法或有例外情况。关于Node.js的发布流程,有以下要点:

  • 每6个月发布一个主要版本( 即Major号变更 ),作为Current版本
  • 发布月份: 4月发布偶数版本10月发布奇数版本
  • 每12个月将一个版本转入LTS版本。对,只有偶数版本(一般是在其后续奇数版本发布时)
  • LTS版本要经历两个阶段:活跃期(Active)与维护期(Maintenance)
  • 活跃期(Active)共18个月,主要在不改变兼容性的情况下,周期性修改自身Bug与合并其他版本的重要修改
  • 维护期(Maintenance)共12个月,只负责修改本版本的Bug以及特别紧急的如安全性问题或者文档更新

后面有详细介绍semver/Major/版本号命名规则,请查看本文3.5章节。或者去semver官网 查看详细的semver介绍semver.org/lang/zh-CN/

3.2 Node.js官网的下载

当用户访问Node.js官网时,会遇到的最主要下载页面,如下:

或者:

可以看到主要是两个版本推荐下载:10.16.0与12.4.0, 根据Semver版本规定版本首数字10或12代表Major(主)版本号。 后面有详细介绍semver/Major,请查看本文3.5章节。或者去semver官网 查看详细的semver介绍semver.org/lang/zh-CN/

3.3 LTS和Current的区别

  • LTS——长期支持(Long Term Support)
  • Current——当前的 你可以这么理解:LTS版本为相对稳定版, Current版本为测试版

Current就代表最新发布的版本(每6个月一次的),它可能是奇数版本也可能是偶数版本。因为其是最新的,所以包含Node.js平台的最新特性。

而LTS代表了一个被不断修正与改进的版本。

每个时刻Current版本只有一个,LTS版本可能有3个,LTS-Active版本可能有2个.

在Node.js官网中给出的LTS版本总是处于LTS的最新版本(目前是10.16.0), 根据发布计划,该版本处于活跃期(Ative)我们可以看到其MINOR版本在不断升级过程中。

3.4 LTS (Long Term Support)

3.4.1 Node.js LTS 计划

Node.js core 在 Node.js 与 io.js 合并后,为了保证发布稳定有序,让开发者能够合理安排升级,开始使用 LTS(Long Term Support)来规划发布周期。 第一个 LTS 版本是 v4,发布于 2015 年 10 月。在这个规划下,Node.js 的版本相当于 master 分支在特定时间下经过稳定化处理的快照,时间到了就将 master 分支上稳定的部分整合起来,发布新的版本,因此 Node.js 的发布是 以时间的流逝为准,在保证兼容性靠拢的前提下跳版本 ,而不是以兼容性和新特性的多少为准,这也解释了为什么 Node.js 的版本看上去跳得那么快(不是“啊,我们攒了这么多大招,可以发新版了!”而是“啊,四月到了该发版了,我们把攒过的大招过一遍,看有什么够稳定能加进去的,虽然可能这些招不怎么大就是了……”)。

值得一提的是,目前的常青浏览器/主流 JavaScript 引擎/ECMAScript 标准/C++ 标准也是采用类似的原则,以时间跨度为基准,从主干上截取稳定特性来进行发布的。

每一个 LTS 都会有一个代号,从元素周期表取元素名,按照字母表排序,挑选出合适的。

  • v4 的代号是 Argon(氩)
  • v6 的代号是 Boron(硼)
  • v8 的代号是 Carbon ( 碳 )
  • v10 的代号是 Dubnium(钅杜)

Node.js 的版本命名规则遵循 semver语义化版本(Semantic Versioning),版本号分为三部分,后面有详细介绍semver,请查看本文3.5章节。去semver官网 查看详细的semver介绍semver.org/lang/zh-CN/

  • 第一个数字(semver-major)增加,表示有不兼容的改变;
  • 第二个数字(semver-minor)增加,表示有保持兼容的新特性;
  • 第三个数字(semver-patch)增加,表示有在保持兼容性与特性不变的前提下的改动,比如修复了 bug 或者改进了文档。

这个命名规则有利也有弊,此处不赘述,但它的一些矛盾之处使得 Node.js 的命名有一些例外,比如安全更新即使会导致不兼容,为了能够更新到所有 major版本,也依然是 semver-minor,去semver官网 查看详细的semver介绍semver.org/lang/zh-CN/

3.4.2 一个 LTS 的一生

具体请到node.js的Release发布git分支上了解更多LTS相关信息github.com/nodejs/Rele…

current(1.4~1.10)
  • LTS current: 第一年的四月到十月

    • 目前 Node.js 会在每年四月从 master 截取分支出来,收集足够稳定的特性,发布一个 major 的偶数版本(比如 v6.0.0),作为下一个 LTS 的备选。在当年四月到十月这段 6 个月的期间,这个偶数版本称作“current”(比如 v6.0.0 "current")。在接受社区反馈后,这个版本会修复 bug,增加新特性,不断改善,还可能删掉一些兼容性影响太大的改进,此时这个版本的 minor 版本会不断增加。开发者可以利用这段时间,用这个候选 LTS 版本在线下测试自己的应用,并将兼容性问题与 bug 反馈给 Node.js 的开发者。

active(1.10~3.4)
  • LTS active: 第一年的十月到第三年的四月

    • 到了当年十月,这个偶数版本就会成为 LTS(比如 v6.9.0 "LTS"),此时它也被称为 "active LTS"。在此后 18 个月的 active 期间,这个版本几乎不会再有任何不兼容的变更,除了安全相关的 OpenSSL 以外其他的依赖(比如 v8)也不会进行大的更新。这段时间内开发者可以将线上的 Node.js 升级到这个稳定的 LTS 版本,并使用 Node.js 的新特性进行迭代。
maintenance(3.4~4.4)
  • LTS maintenance: 第三年的四月到第四年的四月

    • 经过 18 个月的 active 时期后,在第三年的四月,这个版本将会迎来最后 12 个月的 maintenance 时期,这个时候它的更新只有安全更新和 bug 修复。由于 Node.js 每年十月出一个 LTS,因此在这个版本 active 时期的 2/3 的节点,就会有一个新的 active LTS 诞生(目前就处于 v4 LTS 还剩下 6 个月的 active 时,v6 LTS active 发布的时间点)。等到它的 active 时期结束时,开发者已经有 6 个月的时间过渡到下一个 active LTS。即使开发者更新的进度比较慢,也还有 12 个月的 maintenance 时间,抓紧进行升级。12 个月后,这个 LTS 将会结束它的寿命,不再迎来任何更新。因此,每个偶数版本,都会有 3 年的寿命。

3.4.3 这LTS跟 Node.js 的源代码是怎么对应的?

首先,Node.js 的 Github Repo 有一个 master 分支,大部分的 commit 是通过 PR 提交到这个分支上的。根据这些 commit 是否改变了兼容性或者引入了新特性,它们会被打上 semver-major 或者 semver-minor 的标签。

在每年四月前需要准备 LTS 的时候,Node.js 会从 master 分支截取一个新的分支出来,假如这个是 v6,那么这个分支就叫 v6.x-staging 。之后与这个 LTS 相关的修改/打算进入这个 LTS 的修改,比如 bug 修复等,还是提交 PR 到 master ,但需要加一个 tag lts-watch-v6.x 。被合并到 master 之后,这些变动会被负责发布的人挑出来,合并到 v6.x-staging 。

当到了四月的某一天,v6 的第一个版本可以发布的时候,负责发布的人会创建一个 v6.x 分支,从 v6.x-staging 再挑出变更合并进来。从四月到十月,对 v6 的所有修改,无论是 minor 或者 patch,依然先提交 PR 到 master ,然后再被挑出来合到 v6.x-staging ,发版本时再进入 v6.x 。这样,master 总是保留着最新的变动。而其他版本相关的分支,都是从 master 上挑出适合发版本的 commit,混合出来的缩影, v6.x-staging 保留着 v6.x LTS 相关的修改, v6.x 保留每一次 v6 发布的版本。除了负责处理分支的人以外,其他开发者是不会动这些版本相关的分支的。

3.5 Semver

什么是Semver

semver官网 查看详细的semver介绍semver.org/lang/zh-CN/

Sem+ver, Sem是Semantic(语义的)之意,ver是Version(版本)之意。 Semver整体表示一种版本命名的方式,要体现一定的版本变更内容的含义。 目前的Semver一般指由Semver.org组织制定的版本规范。其基本要求如下:版本号的基本形式为MAJOR.MINOR.PATCH,即3部分组成,增加每个部分的值的含义分别如下:

  • MAJOR: 软件的API改变
  • MINOR: 修改或添加功能,但保持向后兼容(API未变)
  • PATCH:补丁,主要是错误修复

四、开发者如何选择node.js版本

  • 如果需要尝试最新的ES规范建议采用latest版本
  • 如果是项目使用,保持稳定 建议采用长期版本

一般来说,我们安装官网推荐的两个版本:LTS版本和Current版本如下

4.1 追求稳定性的——LTS

对于追求稳定性的 Node.js 应用开发者来说,只需要每年十月一个版本成为 active LTS 的时候线上跟进升级即可,也就是每 12 个月升一次 major 版本,每次升级的版本还有 18 个月 + 12 个月的寿命,中间跟进 minor 和 patch的时候不用太担心兼容问题。

目前的推荐是最好在一个 active LTS 出来的 12 个月内完成线上的升级(因为 12 个月后会出下一个 active LTS)。进度落后的话,妥协到 18 个月,这个 LTS 的 active 时期结束前也可以。再赶不上,起码要在 30 个月内这个版本结束寿命之前升级完,否则连安全更新也没有了。

担心直接升级遇到的兼容问题较多的话,则可以在每年四月偶数版本新出来的时候,提前在线下进行测试和升级准备,将问题反馈到社区(当然如果没空也不需要管这一步),并不断跟进,十月再升线上版本。这样线上下都是 12 个月升一次 major 版本,只不过时间点不同。虽然线下需要跟进的兼容性问题多了一些,但同时也可以通过反馈让自己的兼容性需求被社区照顾到。

4.2 热衷于尝试新特性——current

热衷于尝试新特性,或者不在生产环境使用的实验性项目,则可以尝试每年十月发布的奇数 major 版本。每个奇数版本只会维护 8 个月,而且不会有 LTS 那样的兼容性保证,但Node.js 的开发者会利用这个版本为下一个 LTS 做准备,因此它会有更多大胆的尝试,比如更频繁的 v8 更新(意味着更多的 ECMAScript 新特性实现以及性能优化)。

因此,现在还在线上使用 v4.x 的开发者,已经可以准备升级到 v6.x 了。如果你的线上应用还在使用 LTS 计划启用前发布的版本,如 v0.12.x,也最好抓紧升级到 v4.x 或者以上,因为 2016 年 12 月之后 v0.12.x 将不会再有任何安全更新,更早的版本就更没有了,主要是 OpenSSL 的漏洞将不会被修复,这些应用将会暴露在各种安全风险之下。一旦升级到 v4.x 或更高,今后的升级将会相对容易许多,平时只要记得跟进 minor 或者 patch即可,或者懒一点的只需要关注安全更新。

五、谈谈不同平台安装或管理node.js

你可以先查看官网的这一篇文章:

在官网的这篇文章中,列举了不同平台安装或管理node.js的方法

六、多版本管理方案

先看看,淘宝前端团队FED的法海在2015年发布的,管理 node 版本,选择 nvm 还是 n?,如果你的Google浏览器访问不了,请换其他浏览器查看。

6.1 n、nvm、nvmw、nvm-windows

我们平常最多管理node版本的选择如下:

了解更多n信息,你可以点击查看TJ大神在github上写的n,或者www.npmjs.com/package/n;

6.1.1 n

  • n 不支持Windows
  • n 没有子shell,没有配置文件设置,没有复杂的API。
  • n 命令是作为一个 node 的模块而存在
  • n 切换不同的 node 版本时,共用全局的 node/npm 目录
  • n基于node的npm模块安装,需要全局安装的 npm 包(电脑安装了node之后,然后全局安装npm,才能通过使用npm安装n)。>> + 没有安装node,就不能用n;

6.1.2 nvm

这里说的nvm不是nvm-windows,只是单纯说在适用于Mac/Linux的nvm,即使nvm-windows也被很多开发者简称nvm,nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系。

  • nvm 只适用于Mac/Linux。

  • nvm 一般不支持Windows系统,但可能支持WLS(windows下的Linux子系统)。你可以查看官网nvm的重要提示

  • nvm 是一个独立于 node/npm 的外部 shell 脚本,是一个独立软件包

  • nvm 不依赖 node 环境,没有安装node,也可以使用(安装)nvm

  • nvm 的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突

了解更多关于WLS,请查看以下链接:

wsl (windows下的Linux子系统) (百度百科);

关于WSL(Windows上的Linux子系统)的简单介绍及安装

6.1.3 nvmw

 ` nvmw不再维护 `
SORRY, nvmw is no longer maintained. 
If someone wants to keep maintained, contact me by email or twitter.
   

请使用nvm-windows,这里不详细介绍nvmw

  • nvmw 只支持windows系统
  • 先决条件安装nvmw之前,必须先安装: > - git > - python 2.7 + only if you need Node < 0.8

6.1.4 nvm-windows

  • nvm-windows是一个命令行工具
  • nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系。
  • nvm-windows 很多时候也简称叫nvm,但是,请尽量使用nvm-windows称呼
  • nvm-windows切换node版本时,不同node版本之间不共享npm模块,
  • 安装nvm-windows前需要: > - 卸载电脑安装的node.js的任何现有版本 > - 删除可能保留的任何现有nodejs安装目录(例如,“C:\Program Files\nodejs”) > - 删除现有的npm安装位置(例如。"C:\Users\AppData\Roaming\npm"),以便正确使用nvm安装位置
  • 安装nvm-windows完成后必须要 > - 必须为每个已安装版本的node重新安装全局实用程序 例如gulp/webpack ,就是之前基于node安装的所有应用程序或命令行,都需要重新安装. 如果你只使用某一个node版本,那么就在这个node版本重新安装即可,但是如果切换另外的node版本,你又想使用上一个切换的node版本的应用程序的话,就需要重新安装

以下摘译官网的几段话,便于理解:

  1. 请注意,您可能安装的任何全局npm模块都不会在您安装的node.js的不同版本之间共享。此外,在您使用的node版本中可能不支持某些npm模块,所以在工作时要注意您的环境。

  2. 在为Windows安装nvm-windows之前,您需要卸载电脑安装的node.js的任何现有版本。还要删除可能保留的任何现有nodejs安装目录(例如,“C:\Program Files\nodejs”)。nvm-windows生成的链接不会覆盖现有的(甚至是空的)安装目录。

  3. 您还应该删除现有的npm安装位置(例如。"C:\Users\AppData\Roaming\npm"),以便正确使用nvm安装位置。安装完成后,必须为每个已安装版本的node重新安装全局实用程序(例如gulp):

    nvm use 4.4.0
    npm install gulp-cli -g
    nvm use 0.10.33
    npm install gulp-cli -g

请注意!!! 官网上的这段话:

I've done some work to make this project available on all operating systems. The only reason it's been so slow to release is anticipation of an explosion of new installers (chocolatey, homebrew, rpm, .deb, .msi, etc). I've partnered up with BitRock to simplify creation of some of these, but the BitRock installers don't support all of these. 我做了一些工作使这个项目在所有操作系统上都可用。它发布如此缓慢的唯一原因是预期会有大量的新安装程序(chocolatey、自制程序、rpm、.deb、.msi等)出现。我与BitRock合作简化了其中一些的创建,但是BitRock安装程序并不支持所有这些。

nvm-window的多语言支持要到2.0.0才会到来,那时候,它可能是一个跨平台版本管理器,也有可能不叫nvm-windows了,改名我们还暂时还不知道它2.0.0的时候叫什么呢

6.2 nvm 与 nvm-windows的关系简介

关于使用nvm还是n?这个问题,首先这里大家一般会把nvm(支持Linux/mac)和nvm-windows(支持window) 统一称为nvm或NVM。是因为二者在使用命令的时候,前缀都是nvm,不过,nvm-windows 并不是nvm的简单移植,他们也没有任何关系,这是两个不同的项目。所以,尽量以标准方式称呼它们。你可以去GitHub上看看,以下提供链接:

菜鸟教程里提供的一篇教程 使用 nvm 管理不同版本的 node 与 npm ,教程里面介绍的所有nvm命令,都可以在 nvm-windows 中运行。


--------此处的nvm与nvm-windows的区别,待收集整理~------

--------更多区别,等待你的发现,邀请您参与编写------


6.3 n与nvm、nvm-windows的区别简介(如何选择node版本管理)

6.3.1 关于支持的操作系统

  • windows 系统: nvm-window、 nvmw、nodist
  • mac/linux 系统: nvm 或 n

nvm 一般不支持Windows系统,但可能支持WLS(windows下的Linux子系统)

6.3.2 关于全局的 node/npm

  • n:

    由于 npm 安装的模块路径均为 /usr/local/lib/node_modules,当使用 n 切换不同的 node 版本时,实际上会共用全局的 node/npm目录,就是说,n切换版本的时候。 因此不能很好的满足『按不同 node 版本使用不同全局 node 模块』的需求。

  • nvm/nvm-windows :

    不同版本之间,不共享全局的 node/npm,『按不同 node 版本使用不同全局 node 模块』

6.3.3 关于node依赖

  • n:

    n依赖于node,安装n之前,一定得先安装node,全局npm

  • nvm/nvm-windows

    不依赖node,是node的安装依赖于nvm/nvm-windows,就是安装nvm或nvm-windows之前,电脑不需要存在node环境(不用安装node)

6.3.4 关于本身的属性

  • n:

    n基于 node 的模块而存在,基于node开发的

  • nvm/nvm-windows

    nvm/nvm-windows是独立的软件包,nvm-windows是用go开发的

6.3.5 安装前的操作

  • n:

    n不需要卸载已安装的node

  • nvm/nvm-windows

    nvm/nvm-windows安装前需要卸载已有的所有node版本,删除可能保留的任何现有nodejs安装目录,删除现有的npm安装位置

6.3.6 安装后的操作

  • n:

    安装n之后,已安装的全局模块,大多数情况下不需要重新安装全局npm的应用程序(如:glup,webpack),因为n共享全局 node 模块

  • nvm/nvm-windows:

    nvm/nvm-windows安装后需要为每一个node版本重新安装全局npm的应用程序(如:glup,webpack),因为nvm/nvm-windows不共享全局 node 模块


6.4 nvm/nvm-windows与n的比喻举例

对于nvm/nvm-windows与n的描述,举个例子:

把node版本比作兄弟姐妹。所有已安装的全局npm的应用程序(如:glup,webpack)比作已经建好的房子。切换版本的工作就相当于指定某个人看自己的家,假设你爸和你叔伯分家了,你和亲兄弟姐妹住同一个房子,你和堂兄弟姐妹各自住各自的家的房子

当用n管理node时,node版本就是你和你亲兄弟,都住在一个房子里;你看家,和你亲兄弟姐妹看家,看的家,都是同一个房子(公用同一个node模块);

当用nvm/nvm-windows管理node时,node版本就是你和你堂兄弟姐妹,不住同一个房子。你的房子是你的房子,你堂兄弟的房子是你堂兄弟姐妹的房子。看家时,肯定是你看的家和你堂兄弟姐妹看的家肯定不是同一个房子(不公用同一个node模块),难不成你给你堂兄弟姐妹看家啊!!!,呵呵~你堂兄弟是不给了你几百万,分我点吧,我也给你看家


6.5 nvm-windows官网摘译

1.首先摘译来自nvm-windows官网的几段话

------------------------摘译开始----------------------------------

node.js有几个版本管理器。像nvm和n这样的工具只能在Mac OSX和Linux上运行。Windows用户被冷落了?不。nvmw和nodist都是为Windows设计的。

首先,这个版本的nvm(指nvm-windows)不依赖于node。它是用Go编写的...

控制机制也大不相同。支持具有热切换功能的多个node安装的一般方法有两种。第一种方法是在每次切换版本时修改系统路径,或者通过使用.bat文件模拟节点可执行文件并相应地重定向来绕过它。在我看来,这总是有点过时,而且由于这个实现有一些怪癖。

第二个选项是使用符号链接。这个概念要求将符号链接放在系统路径中,然后将其目标更新到要使用的节点安装目录。这是一种直截了当的方法,似乎是人们推荐的……直到他们意识到Windows上的符号链接有多么痛苦。这就是为什么以前没有发生过。

为了创建/修改符号链接(symlink),您必须以管理员身份运行,并且必须绕过Windows UAC(那个烦人的提示符)。幸运的是,我已经在node-windows中的一些帮助脚本中解决了这个问题。因此,Windows的NVM(指nvm-windows)只维护一个符号链接,该符号链接只在安装期间放在系统路径中。切换到不同版本的节点就是切换符号链接目标。因此,这个实用程序不需要您使用x.x运行nvm(nvm-windows)。每次打开控制台窗口。当您运行nvm时,使用x.x。节点的活动版本在所有打开的控制台窗口中自动更新。它在系统重新引导之间也会持续存在,所以您只需要在需要进行更改时使用nvm(用nvm-windows使用nvm命令)

Windows的NVM(nvm-windows)附带了一个安装程序,这是我在Fenix Web服务器上工作的副产品。

总的来说,这个项目(nvm-windows)汇集了一些想法、其他模块的一些久经沙场的部分以及对新版本node的支持。

Windows的NVM使用node项目提供的列表识别“最新”版本。版本1.1.1+使用这个列表。在此列表存在之前,我一直在收集发行版并将其作为独立的数据提要提供。这个列表在版本1.1.0和更早的版本中使用过,但是现在不推荐使用。

-----------------------摘译结束----------------------------

--

以上摘译涉及的概念如下:

  • 符号链接(symlink) 符号链接是对一个文件的间接指针

你可以通过以下教程链接,了解符号链接(symlink)和硬链接

七、nvm-windows 安装多版本node步骤

写了3天,重点终于来了,首先,重复介绍nvm-windows的简单描述和注意事项

7.1 nvm-windows

  • nvm-windows是一个命令行工具
  • nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系。
  • nvm-windows 很多时候也简称叫nvm,但是,请尽量使用nvm-windows称呼
  • nvm-windows切换node版本时,不同node版本之间不共享npm模块,
  • 安装nvm-windows前需要: > - 卸载电脑安装的node.js的任何现有版本 > - 删除可能保留的任何现有nodejs安装目录(例如,“C:\Program Files\nodejs”) > - 删除现有的npm安装位置(例如。"C:\Users\AppData\Roaming\npm"),以便正确使用nvm安装位置
  • 安装nvm-windows完成后必须要 > - 必须为每个已安装版本的node重新安装全局实用程序 例如gulp/webpack ,就是之前基于node安装的所有应用程序或命令行,都需要重新安装. 如果你只使用某一个node版本,那么就在这个node版本重新安装即可,但是如果切换另外的node版本,你又想使用上一个切换的node版本的应用程序的话,就需要重新安装

7.2 安装前的步骤

以下范例,我使用windows7

【步骤一】、假设你之前安装过node,并且npm全局安装模块,并且用于窗口命令执行的(非项目操作),。(没有安装过node和全局模块的请或者不需要这些命令操作的,请———— 跳过

如果,npm全局安装模块仅用于窗口命令操作的,而非项目操作的,请跳过此步骤。 项目中有package.json文件,你只需要在安装完node之后,npm install就可以安装项目所需的全部依赖了。不需要一个个重新install,请———— 跳过

首先为了保证你的之前安装的全局模块能够在命令窗口使用(非项目需要),最好先截图记下你安装过哪些npm全局安装模块,以下,我们使用cmd来操作,你也可以使用git 操作,但不建议。

在操作之前,你应该需要了解,nodejs全局安装和本地安装的区别,还有如何用npm 查看全局安装的模块和本地安装的模块,请先阅读以下教程链接再回来进行操作。

【原】nodejs全局安装和本地安装的区别;

npm 查看模块


1.1、 快捷键【win+R】弹出运行搜索窗口,输入 cmd, ——————(下一步)


1.2、 回车,弹出cmd命令窗口,输入如下命令:——————(下一步)
npm list -g --depth 0

如果不添加--depth 0 会将更详细的列表展示出来。这里我们不需要显示详细信息。


1.3、 回车,查看已安装的【npm全局模块】,并截图保存,或复制保存(一定要保存!!!!)——————(下一步)


1.4、去你的项目下,找到【node_modules】文件夹(node模块包),拷贝保存一份副本——————(下一步)

如果你的项目中,package.json里的dependencies和devDependencies配置是规范的,那你就不需要拷贝【node_modules】这个项目依赖包了。你只需在安装完node之后,进入到该项目直接使用命令npm install下载【node_modules】依赖就好了+_+

更多关于dependencies和devDependencies,请阅读:dependencies和devDependencies的正确使用姿势


【步骤二】、卸载电脑安装的node.js的任何现有版本及删除路径

你可能会有疑问:

  • 先卸载npm还是先卸载node?
    • npm is written in Node.js, so you need to install Node.js in order to use npm. You can install npm via the Node.js website, or by installing a Node Version Manager or NVM.---译:npm是node.js编写的,因此需要安装Node.js才能使用npm。您可以通过Node.js网站安装npm,或者安装Node版本管理器或NVM。

      就是,npm一定在node.js里面!!!;

  • 为什么不从node自带的uninstall Node.js来卸载,而是用电脑自带的程序和功能里卸载?
    • 首先不知道你是用exe来安装node,还是msi来安装node的,所以windows根据exe或msi来安装node软件的流程我们无法得知详细;msi和exe安装的区别,请自行了解。
    • 而node自带的uninstall Node.js卸载,会有相关残留;
  • 为什么需要在cmd查看node安装路径或npm安装路径?
    • 为了彻底删除node.js,我们需要把之前的安装路径全部删除,卸载并不能完全删除安装路径的整个文件夹。
  • ......

2.1、在cmd下输入以下命令后回车,查看并保存node.js安装路径——————(下一步)

where node

或者

where npm


2.2、进入【控制面板】,选择【所有控制面板】,选择【程序和功能】,找到已安装的程序Node.js,右键鼠标,卸载——————(下一步)

2.3 、验证node已经卸载,在cmd输入命令 node -v,出现如下提示:——————(下一步)

(原谅我换了一台电脑来操作演示截图,因为网实在太差了,刷新个网页都刷不出来,别叨叨了,继续写)

“node”不被识别为内部或外部命令,可操作的程序或批处理文件。 “node”不被识别为内部或外部命令,可操作的程序或批处理文件

    不需要检查npm卸载没,因为npm写入到node.js去了,卸载node就相当于把npm也卸载了,不信你自己试试,输入`npm -v`

在win7上显示: 【'node'不是内部或外部命令,也不是可运行的程序或批处理文件】

'node'不是内部或外部命令,也不是可运行的程序或批处理文件

在win8上显示:【'node' is not recognized as an internal or external command,operable program or batch file.】 'node'不是内部或外部命令,也不是可运行的程序或批处理文件,'npm'不是内部或外部命令,也不是可运行的程序或批处理文件


2.4 、重启电脑(让电脑的软件注册表刷新一下,啦啦啦~,删库跑路)——————(下一步)


2.5、 重启之后(开机摸鱼混底薪)——————(下一步)


2.6、 删除node安装路径,删除全局模块安装路径——————(下一步)

如果你是使用Node.js的uninstall Node.js来卸载的,就需要找到之前记录保存的node安装目录,并去到该目录,然后删除该文件夹,例如:在这里,我删除的是:C:\Program Files\nodejs,如果你是根据【2.2步骤】来卸载node.js的,那就不需要删除这个node安装目录,直接——————(下一步)


2.7、 删除node相关的计算机-环境变量(和用户变量)及引用

点击【电脑】->【系统属性】->【高级系统设置】->【环境变量】

  • 分别删除【用户变量】里的path(部分大小写)变量里的node的路径,和【系统变量】的path变量的node路径

    • 如果你的node路径是以引用方式添加到path变量里的, 请同时删除path变量里的node变量引用和该node引用变量; 这里,因为我只在系统变量中添加了node路径,所以我删除了系统变量中的node路径, 标红色的是我删除的

如何知道需要删除哪些环境变量和文件? 找到以下路径,删除这些路径对应的文件夹和环境变量(用户变量和系统变量),有的话就删除。

C:\Program Files (x86)\Nodejs
C:\Program Files\Nodejs
C:\Users\`{User}`\AppData\Roaming\npm (或者 %appdata%\npm)
C:\Users\`{User}`\AppData\Roaming\npm-cache (或 %appdata%\npm-cache)
C:\Users\`{User}`\.npmrc (没有“.”前缀的也可能需要检查)
C:\Users\`{User}`\AppData\Local\Temp\npm-*(以npm-开头的文件夹)

如果你的电脑C盘没有显示‘.’前缀的隐藏文件,请把隐藏文件显示出来,记得在删除相关路径后,设置回默认值哦!!

win7的如下操作: 把隐藏文件显示出来

win8的需要在窗口右上方先把【隐藏的项目】去√,然后点击右方的【选项】。。。。。

=======================================================

在这里,我删除

  • C:\Users\HDMI\AppData\Roaming下的【npm】和【npm-cache】
  • C:\Users\HDMI\AppData\Local\Temp下的【npm-3328-b046e407】、【npm-7492-60989c8f】、【npm-8352-f82062a1】

--------------------总结一句话,删除和node/npm相关的所有***---------------------------- 记得在删除相关路径后,把显示隐藏文件设置回默认值哦!!


2.8、恭喜你,你已成功彻底卸载node.js/npm和删除相关路径

----------------------------整理编写了差不多一周,终于解放--------------------------------------------

7.3、安装nvm-windows的步骤

进入nvm-windows的GitHub,下载最新版nvm-windows

你会看到,有两个方式:

  • nvm-noinstall.zip: 绿色版本,需要配置(新手的话还是通过绿色版本)
  • nvm-setup.zip:安装包,无需配置。

------------------------以下我们选择nvm-setup.zip安装------------------------------------

解压后,是一个exe,

双击,进入安装

安装前,建议把杀毒软件关闭退出

1.同意协议,下一步【next】


2.配置nvm的安装位置,(不要有中文路径或空格)。在你选择路径后,它会默认给你添加\nvm后缀(利于辨识)


3.设置node的symlink文件夹位置。(不要有中文路径或空格)。这个路径是后面 nvm use 存放你的 nodejs 程序的目录,安装完成后该目录会自动删除掉


4.如果在安装nvm之前,电脑上就已经安装有node的,会看到如下图,询问你是否用nvm管理已经存在的node版本。一定要选‘是’,这个弹窗可能会出现好几次,都点是。(如果您已经按照上面的【7.2 安装前的步骤】来操作,便不会出现这样的提示,也建议您按照上面的【7.2 安装前的步骤】来操作,否则,后续使用node会出现问题)


5.检查确认按照的路径,如果你想查看或更改任何设置,则单击back,确认完之后就可以点击【install】安装了


6.如果出现如下安全提示,请把杀毒软件关闭退出,或者选择允许程序所有操作(建议把杀毒软件关闭退出)


7.安装完成


8.检查nvm-windows是否安装成功: 快捷键【win+R】输入cmd后回车,打开cmd命令窗口,输入


nvm -v

出现版本号,则为成功,如下: 使用管理员权限打开一个命令行。输入nvm v,会显示nvm的版本号,有则表示安装成功。


9.配置镜像———— 跳过

先了解一下:

了解完之后在你nvm-windows的安装路径下,

(1)先查看setting.txt,你会发现,里面只有【root】和【path】

(2) 双击运行 install.cmd ,然后会让你输入”压缩文件解压或拷贝到的一个绝对路径” 先不用管它,直接回车,成功后

你会发现setting.txt多了【arch】和【proxy】

(3)找到settings.txt打开并编辑【node_mirror】和【 npm_mirror】为你想要的镜像,其他不要动。 在这里,我进入到安装nvm-windows的路径

我配置淘宝镜像如下:


 node_mirror: https://npm.taobao.org/mirrors/node/
 npm_mirror: https://npm.taobao.org/mirrors/npm/

配好之后的setting.txt如下:

注意:不要动原有的参数,只添加镜像就好了

(4)如果你的nvm-windows安装路径下没有setting.txt。请先按以上步骤操作,或者 其中:

  • rootnvm-windows安装路径——配置为当前 nvm.exe 所在目录 如: root: C:\dev\nvm, root:后面一定要有一个空格
  • pathnode 快捷方式所在的目录——配置为 node 快捷方式所在的目录 如: path: C:\dev\nodejs, path: 后面一定要有一个空格
  • arch操作系统的位数——配置为当前操作系统的位数(32/64)
  • proxy: 代理,不用配置

10.配置环境变量

nvm-setup.zip安装包来安装的nvm-windows,会默认为我们添加了环境变量如下所示:

【系统变量】

【用户变量】

    虽然用户变量少了NVM_SYMLINK,但是,系统自动会查找系统变量,一样会找到NVM_SYMLINK

注意: root:和path: 后面一定要有一个空格否则在安装node的时候不会安装到nvm文件夹下

如果没有,需要手动配置

手动配置注意事项

  • NVM_HOME和NVM_SYMLINK这两个环境变量的顺序一定不要改变,先创建NVM_HOME再创建NVM_SYMLINK

如何检查环境配置设置正确?

打开CMD通过set NVM_HOMEset NVM_SYMLINK 命令查看环境变量是否配置成功


7.4、用nvm-windows安装node的步骤

安装node的命令

安装指令: nvm install <version> [arch]

可以是node.js版本,也可以是最新稳定版本的“最新”版本。 可选地指定是安装32位版本还是64位版本(默认为system arch)。 将[arch]设置为“all”以安装32位和64位版本。 其中【arch】是nvm-windows安装目录下的setting.txt文件下载配置的arch

如果我们配置的arch是64的,那么nvm下载node时,就会默认下载安装64位操作系统的

nvm-windows安装node.js选项有:

  • nvm install [版本号] 安装固定版本node
    • 例如:nvm install 6.10.2安装Node.js的6.10.2版本
nvm install 6.10.2
  • nvm install latest 安装最新版本node
    • 例如:nvm install latest安装Node.js的6.10.2版本
nvm install latest

nvm-windows使用node.js选项有:

  • nvm use [版本号] 当前使用某版本node
    • 例如:nvm use 6.10.2使用Node.js的6.10.2版本
nvm use 6.10.2

nvm-windows安装node.js/npm实例

(1) 打开cmd,输入命令nvm install latest安装最新版12.5.0

nvm install latest

同时,它会自动帮我们安装npm

(2)输入命令nvm use 12.5.0回车,使用12.5.0版本的node.js

nvm use 12.5.0

(3) 测试是否成功安装node,输入node -v回车,可以看node版本号证明安装成功

node -v

而且你会发现,在我们对应与setting.txt配置的path(配置node的快捷方式),我们可以看到有一个node的快捷方式

注意:如果你在测试是否成功安装node是出现了如下问题,请确保你已经输入使用node命令nvm use 12.5.0回车

【“node”不被识别为内部或外部命令,可操作的程序或批处理文件。】

或者

“node”不被识别为内部或外部命令,可操作的程序或批处理文件

八、参考链接: