node nodejs npm 傻傻分不清楚on Ubuntu

在学习angular的过程中,要安装Node,但是我在ubuntu上用一些方法安装的版本都太低了,而且还有node、nodejs这两个东西交替出现,让我很是怀疑人生。

决定扒一扒这鬼玩意儿的前世今生。倒要看看你葫芦里装的是什么逼!

ubuntu 下的Node与Nodejs

首先这两个我认为是一个东西的两个发展阶段,在最开始的时候,名字叫做nodejs,后来升级改版以后就变成了node。

在某个版本之前,我们安装的都是nodejs。命令行中使用的也都是nodejs。后来可能作者们要开始装逼了,于是决定把丑爆了的js去掉,因为js在一些工程师的眼中很垃圾,所以不能让别人认为node也很垃圾。事实上js确实有很多缺陷,但是并不影响它一统前端,甚至进一步掠夺市场进驻后端,甚至现在在无联网领域成为香饽饽。

js在进步,同时node也在进步,喜欢用js这样用起来比较便捷的工程师也越来越多,所以,未来的流行语言里,js应该也有重要的一席之地,所以我要学会它。

js的细节不在这篇文章的讨论范围之内,我还是比较关心这个node到底是个什么神通广大的东西,让这么多程序员都不淡定了。

Node是个啥

官方解释:nodejs是一个平台, 它构建在chrome的v8引擎之上,能简易的构建快速,可扩展的网络应用程序…

害怕,口气还真是很大。关键是人家说的是网络应用程序哎!不是前端,也不是server,而是网络应用程序。
其本质就是一个网络应用程序喽,所以必然有两个的东西非常重要,一个是网络,一个是应用程序。

下面分几个小点

  1. V8引擎,名字很帅哈。这个引擎其实就是javascript的解释器,将代码解释成本机可以运行的机器代码。

  2. openssl是个开源的,安全套接层协议。其将数据加密和通信加密算法直接实现在协议中,使得数据离开你的机器时就是加密的,直到目的地才进行解密。是安全通信领域应用最广的一个开源项目。这部分详细的内容会在接下来的文章中详述。Node本身是集成了这个openssl项目的。

  3. 事件驱动的非阻塞io模型。
    这个是其作为应用程序的一个特征。所谓事件驱动,就是一个异步的处理机制。整个程序通过订阅相应的时间消息,来出发相应的动作。
    实现这个功能的主要技术就是libuv, 其前身是linux中的libev。Node重写了这个库并在windows上做了相应的实现,所以node是个可跨平台的运行的程序。

以上就是Node的几个重要的特点,了解了这些特征就能进一步了解其原理。下面在选择一些东西来记录一下。

libuv

nodejs 其实就是 libuv 的一个应用而已。

你自己写程序也可以集成libuv进来, 这样你的c++程序就有了消息循环了. 不再是简单main函数了. 你可以订阅系统的事件, 然后当事件发生时, 系统会调用你的回调函数, 就跟windows上的button click事件一样方便. 而且是跨平台的哦. 是不是很酷. 你几乎可以订阅所有的系统事件, 比如socket事件, 文件读写事件等等.

nodejs简单的说只是把javascript解释成c++的回调, 并挂在libuv消息循环上, 等待处理. 这样就实现了非阻塞的异步处理机制(non-blocking I/O model).

那么为什么是javascript而不是其他的语言. 很简单, 因为javascript的闭包. 这非常适合做回调函数. 因为我们一般都希望当回调发生时, 它能记住它原来所在的上下文. 这就是闭包最好的应用场景.

小结

Node其实就是一个平台,在这个平台上运行的是javascript语言。你可以使用它来实现很多东西,不仅仅是server端的服务程序,也可以写一个窗口的软件程序等等。
Node与python、JVM其实都是一类东西。

ubuntu 安装最新的Node和npm

npm是Node的包管理器。就像是我们的apt对于debian的概念一样。

ubuntu维护的源大多是LTS版本的,但是node的发展速度很快有很多新特性在新的版本中。所以很多时候稳定版本并不能满足我们的需求。下面就介绍一下最新版本的怎么安装。

安装npm

先用ubuntu库中的资源安装一个低版本

1
sudo apt install npm

此时我们npm -v发现版本是3.5.2
升级到新版本:

1
sudo npm install npm@latest -g

升级后的版本是:5.3.0。版本差距还是非常大的,所以升级十分必要。

安装一个第三方的模块n

项目在Github上,不复杂,主要就是一个脚本。

1
sudo npm install -g n

然后用这个第三方模块来选择安装的node版本。

1
2
3
4
5
6
//安装官方最新版本
sudo n latest
//安装官方稳定版本
sudo n stable
//安装官方最新LTS版本
sudo n lts

我一般会选择安装lts版本。

至此node安装完毕可以开始搞angular了。

Talk is not cheap.