目前Centos中比较稳定的版本:

[root@localhost ~]# node -v
v10.15.3
[root@localhost ~]# npm -v
6.4.1

一、如何给npm降级

最近一直在用npm v5,没什么问题。

直到今天玩 create-react-native-app 的时候发现,它们“强烈推荐”使用npm v3或者v4,因为v5还有些bug没解决,对于create-react-native-app不稳定。


简单暴力的方法是:

npm install npm@4 -g

@符号后面跟上要安装的版本号

但感觉有点不安全。


还是自己解决吧。


首先,介绍一下nvm (node version manager),有了它,妈妈再也不用关心我的node版本管理问题了。

*大提示:装nvm之前,建议把现有的所有nodejs版本全部删除,以后就让nvm全权管理就好了。保存着旧的node反而容易造成版本管理的困难。

官网nvm安装指南:https://github.com/creationix/nvm#installation


nvm有了后,直接去装对应版本的nodejs就好了。

node 8 对应 npm v5.

node 7 对应 npm v4


如果需要npm v5, 则

nvm install 8
nvm use 8


然后如果需要npm v4了,装上node 7就可以了
nvm install 7
nvm use 7

这时再试试

npm version
{ npm: '4.2.0',
  ares: '1.10.1-DEV',
  cldr: '30.0.3',
  http_parser: '2.7.0',
  icu: '58.2',
  modules: '51',
  node: '7.9.0',
  openssl: '1.0.2k',
  tz: '2016j',
  unicode: '9.0',
  uv: '1.11.0',
  v8: '5.5.372.43',
  zlib: '1.2.11' }


*注意:只是"nvm use"的话,每次新开一个terminal都需要重新指引一下node的版本。

如果你需要长期使用“另类”版本,可以把修改一下默认的版本,原理就是给“default”赋值:

nvm alias default 7



二、如何列出npm模块所有的历史版本?

我们一般用npm来自动安装js的模块(module),但是有的时候,默认情况用
npm install xxxx –save 的时候,会安装最新的版本,但是有的时候,我们会发现最新的版本可能与某些浏览器不兼容,比如,indicative最新的版本与IE11兼容性就不太好,为了解决这个问题,有的时候,我们需要进行版本的降级,但是在版本降级之前我们需要知道有哪些历史版本?这个时候,我们应该怎么办呢?
用下面的命令:npm view xxx version, 比如需要显示indicative的所有版本历史信息,命令和执行结果如下:

npm view indicative versions
[ '0.0.0',
  '0.0.1',
  '0.0.2',
  '0.0.3',
  '0.0.4',
  '0.0.5' ]

三、nvm和nodejs安装使用

前言

安裝 Node.js(以下直接以node稱呼)有很多種方式。不過由於node更新非常快速,開發過程很有可能會有切換node版本的需求,因此強烈建議不要使用MAC上常用的 Homebrew 安裝node,而是使用 nvm ( Node Version Manager )這個tool來安裝並管理node。不過我們還是需要用Homebrew來管理nvm,所以推薦的安裝流程如下:

使用Homebrew安裝nvm
使用nvm安裝Node.js
使用nvm無痛切換Node.js版本
這篇文章針對上述流程做一個簡單的介紹

使用Homebrew安裝nvm

Homebrew基本上已經是MAC user必備的tool了,還沒裝的人強烈建議趕快裝上它吧!網路上教學很多,這邊就不再多介紹了。

首先先用$ brew install nvm安裝nvm:

 $ brew install nvm ==> Downloading https://github.com/creationix/nvm/archive/v0.2.0.tar.gz
######################################################################## 100.0%

==> Caveats
Add the following to $HOME/.bashrc, $HOME/.zshrc, or your shell's equivalent configuration file: source $(brew --prefix nvm)/nvm.sh Type `nvm help` for further information. ==> Summary /usr/local/Cellar/nvm/0.2.0: 3 files, 24K, built in 5 seconds
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

安裝完後,為了讓你可以直接在shell使用nvm指令,必須在你的 .bash_profile 加入以下這行(習慣把設定放在.bashrc的人可以把以下的.bash_profile改成.bashrc)

 source $(brew --prefix nvm)/nvm.sh
 
  • 1

或者直接輸入以下這行來加入

 $ echo "source $(brew --prefix nvm)/nvm.sh" >> .bash_profile
 
  • 1

記得重新source你的 .bash_profile 來讓設定生效

 $ . ~/.bash_profile
 
  • 1

OK,以上就完成了nvm的安裝,簡單吧!

使用nvm安裝Node.js

安裝完了nvm,接著安裝主角node。先用$ nvm ls-remote指令看一下有哪些版本可以安裝:

 $ nvm ls-remote
      .
      .
      .
  v0.10.20
  v0.10.21
  v0.10.22
  v0.10.23
  v0.10.24
   v0.11.0
   v0.11.1
   v0.11.2
   v0.11.3
   v0.11.4
   v0.11.5
   v0.11.6
   v0.11.7
   v0.11.8
   v0.11.9
  v0.11.10
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

真夭壽多啊..果然是正在火速成長中的技術!

直接用$ nvm install 指令安裝官網上建議的版本:

 $ nvm install v0.10.24
######################################################################## 100.0%

Now using node v0.10.24
 
  • 1
  • 2
  • 3
  • 4

也同時安裝最新版來測試nvm的版本管理功能:

 $ nvm install v0.11.10
######################################################################## 100.0%

Now using node v0.11.10
 
  • 1
  • 2
  • 3
  • 4

使用nvm無痛切換Node.js版本

在介紹使用nvm切換版本前,先簡單說明nvm的工作原理。

nvm會把各個版本的node安裝在/usr/local/opt/nvm底下。我們可以看看該目錄底下放了哪些東西:

 $ ls /usr/local/opt/nvm
INSTALL_RECEIPT.json  LICENSE.md  alias  bin  nvm.sh  v0.10.24  v0.11.10
 
  • 1
  • 2

我們可以發現透過nvm安裝這兩個版本,事實上會在nvm目錄下另外建立了v0.10.24以及v0.11.10兩個目錄來分別存放node的binary檔。又nvm會在你的$PATH最前面安插指定版本的目錄,透過這個方式你在使用node指令時就會用指定的版本來運作了。

實際確認PATH的值看看:

 $ echo $PATH
/usr/local/opt/nvm/v0.11.10/bin: ...
 
  • 1
  • 2

nvm的用法非常的簡單。我們可以另外用$ nvm ls指令確認nvm目前可以管理的版本有哪些:

 $ nvm ls

  v0.10.24
  v0.11.10
current:    v0.11.10
 
  • 1
  • 2
  • 3
  • 4
  • 5

由於透過nvm安裝node,會自動把最後安裝的版本設為目前使用中的版本,因此上述指令會看到current: v0.11.10,表示我們目前正在使用v0.11.10

我們可以用$ nvm use 切換版本:

$ nvm use v0.10.24
Now using node v0.10.24
 
  • 1
  • 2

也可以偷懶一點,不用打完整的版號:

$ nvm use 0.10 
Now using node v0.10.24 

切換成別的版本看看:

 $ nvm use 0.11
Now using node v0.11.10
 
  • 1
  • 2

夠簡單吧!

不過問題來了,如果你另外開一個shell視窗,並輸入nvm,會發現current version是空的:

$ nvm ls
v0.10.24 
v0.11.10 
current: 

這是因為利用nvm use指令只會在當前的shell生效,當你開了新的shell就會發現PATHnodePATH的值已經不包含剛才設定的node目錄了。要解決這個問題就是利用 nvm alias default 來設定一個預設的node版本:

$ nvm alias default 0.10 
default -> 0.10 (-> v0.10.24) 

此時再打開另一個shell視窗,就可以直接使用你所設定的node版本了。

實際跑跑看Node.js

我們直接拿官網的例子來試試看
先產生一個example.js的檔案:

 $ touch example.js
 
  • 1

內容如下

http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

執行看看

$ node example.js
Server running at http://127.0.0.1:1337/
 
  • 1
  • 2

打開瀏覽器,輸入http://127.0.0.1:1337,如果看到 “Hello Word” 就代表成功了

後記

以上是我目前為止覺得比較好管理的安裝方式,如果有更推薦的方法歡迎一起討論!

http://icarus4.logdown.com/posts/175092-nodejs-installation-guide

四、CentOS通过nvm安装管理node

CentOS通过nvm安装管理node

五、使用 nvm 管理不同版本的 node 与 npm

使用 nvm 管理不同版本的 node 与 npm