nvm
能够安装官网最新版本以前的任意版本,能够任意切换不一样版本$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
$ nvm ls-remote v6.1.0 v6.2.0 v6.2.1 v6.2.2 v6.3.0 ....
v6.3.0
版本$ nvm install v6.3.0
apt-get
相同,这里再也不复述 **$ nvm ls -> v6.3.0 default -> v6.3.0 node -> stable (-> v6.3.0) (default) stable -> 6.3 (-> v6.3.0) (default) iojs -> N/A (default) lts/* -> lts/argon (-> N/A) lts/argon -> v4.6.0 (-> N/A)
从运行结果能够看出,当前电脑上的 node 版本只有一个 v6.3.0
,而且当前正在使用的版本也是 v6.3.0
,默认的版本一样也是 v6.3.0
前端
v4.4.5
版本,首先安装该版本(能够先使用 nvm ls-remote
查看全部版本)$ nvm install v4.4.5
use
命令切换至该版本$ nvm use v4.4.5 Now using node v4.4.5 (npm v2.15.5)
$ nvm alias default v6.3.0
若是没有设置 default
默认开机 node 是没有启动的,因此可能会报找不到 node 命令的错误,所以咱们须要设置默认版本node
v4.4.5
版本$ nvm uninstall v4.4.5
轻轻松松完成切换!git
不过问题来了,这时若是你新打开一个bash,输入nvm current
会发现显示为null
,这是由于使用nvm use
命令只会在当前bash里生效,从新打开一个bash你会发现$PATH
的值已经不包含刚才的node目录了,要解决这个问题也很简单,使用nvm alias default <version>
命令来指定一个默认的node版本就ok了,这里我使用了v4.1.0
做为默认版本:github
➜ ~ nvm alias default v4.1.0 default -> v4.1.0
nvm
能够供咱们选择要安装的版本,而且则解决了多版本共存、切换问题,但在安装以前,请确认本机之前的安装包已经被卸载npm
安装目录(终端经过 whereis node
查看)数组
nvmbash
/home/xxx/.nvm/versions/node/v6.3.0/bin/node
实现原理:在一个目录下存放多个版本的目录,在切换时候将相应的版本路径加入 PATH 中,从而实现版本的切换,例如从 v6.3.0
切换到 v4.4.5
具体流程以下:app
$ node --version v6.3.0
$ echo $PATH /home/guoru/.nvm/versions/node/v6.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
经过环境变量咱们能够看出,如今使用的 node 版本是 v6.3.0
curl
nvm use v4.4.5
切换版本,而且查看环境变量$ nvm use v4.4.5 Now using node v4.4.5 (npm v2.15.5) $ echo $PATH /home/guoru/.nvm/versions/node/v4.4.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
能够看出环境变量已经将 PATH 路径中的版本改成 v4.4.5
版本了ide
若是您是一个前端开发人员,建议您使用 nvm
来安装 node,若是您是一个普通的用户,建议您使用 apt-get
安装 node 。
** 若是您还有兴趣,请继续阅读 **
启动 node 时内部实现过程
在命令行启动 node 程序时,传入参数,node 程序根据输入的命令参数,执行相应的处理流程。即:在 node 程序中会使用process.argv
获取命令行输入参数。Process.argv
是一个数组,用于存放从命令行传入的参数。其相似C语言 main 函数中的char* argv[]
,假定咱们在控制台输入 node argument.js –r arguments.js
. 那么程序argument.js 启动后, process.argv
数组中就就存储了如下几个字符串信息:process.argv[0] = “node”, process.argv [1]= “argument.js”, process.argv [2] = “-r”,process.argv[3] = “argument.js
”. 因为参数数组的前两个存储的是字符串 ”node” 和源代码文件名,要想得到有效的输入参数,咱们通常会从process.argv[2]
开始处理。
var args = { '-h': displayHelp, '-r': readFile }; function displayHelp() { console.log('Argument processor:', args); } function readFile(file) { if (file && file.length) { console.log('Reading:' ,file); console.time('read'); var stream = require('fs').createReadStream(file); stream.on('end', function() { console.timeEnd('read'); }); stream.pipe(process.stdout); } else { console.error('A file must be provided with the -r option'); process.exit(1); } } if (process.argv.length > 0) { process.argv.forEach(function(arg, index) { if (arg === '-r' || arg === '-h') { console.log(process.argv.slice(index + 1)); args[arg].apply(this, process.argv.slice(index+1)); } }); }
args 对象存储了对应参数要执行的对应函数,例如输入参数是 -r
那么执行 readFile
函数, 若是输入参数-h
则执行displayHelp
函数。readFile 函数被调用时,传入的参数是要读取的文件名。经过 Node 的文件系统模块fs
所提供的接口调用createReadStream
, 将指定文件名的文件内容读入造成输入流对象,而后再经过输入流对象的pipe
函数,将输入流中的全部数据内容,重定向到标准输出,其实也就是输出到控制台
做者:半生不熟_ 连接:https://www.jianshu.com/p/72b5df9ef345 來源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。 做者:半生不熟_ 连接:https://www.jianshu.com/p/72b5df9ef345 來源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。