[TOC]

(1)Node.js 简介与安装

1.Nodejs简介
Node.js是目前非常火热的技术(正式开启JavaScript的后端开发之旅),但是它的诞生经历却很奇特。

Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务,对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以最终Ryan瞄向了JavaScript;

因为JavaScript是单线程执行,根本不能进行同步IO操作,所以JavaScript的这一“缺陷”导致了它只能使用异步IO。
于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。

Tips版本发展历史:
因为Node.js是开源项目,虽然由社区推动但幕后一直由Joyent公司资助。由于一群开发者对Joyent公司的策略不满,于2014年从Node.js项目fork出了io.js项目,决定单独发展,但两者实际上是兼容的,分家后没多久,Joyent公司表示要和解,于是io.js项目又决定回归Node.js。
具体做法是将来io.js将首先添加新的特性,如果大家测试用得爽,就把新特性加入Node.js,io.js是“尝鲜版”,而Node.js是线上稳定版,相当于Fedora Linux和RHEL的关系。

Q:Node上运行的JavaScript相比其他后端开发语言有何优势?
答:借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。

Q:什么是Nodejs?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,没有浏览器安全级别的限制提供很多系统级别的API; 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效.

  • 文件IO
  • 进程管理
  • 网络通信

Node.js优点:

  • JavaScript语言本身是完善的函数式语言,使用最新的ECMAScript6标准
  • 模块化的Js代码,加上函数式编程
  • 使其轻量又高效
  • 后端开发语言

2.Nodejs安装
对于Windows安装不多说,侧重于linux下面进行开发和编程nodejs;
安装完成后,在Windows环境下,请打开命令提示符,然后输入node -v,如果安装正常,你应该看到这样的输出:

1
2
C:\Users\Administrator>node -v
v9.3.0

Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/ (国内:http://nodejs.cn/download/)

安装环境:CentOS Linux release 7.6.1810 (Core) [强烈建议使用Centos 7.x]
安装步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#1.使用nvm维护多个版本的node.js
https://github.com/creationix/nvm

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
$ source /root/.bashrc
$ command -v nvm #返回nvm 表示安装成功
[[email protected] nodejs]$ nvm --version
0.34.0
#配置加速镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

#2.安装node.js
$ nvm ls-remote #查看nodejs版本
v10.15.3 (Latest LTS: Dubnium)

$ nvm install 10.15.3 #安装当前稳定版本
Creating default alias: default -> 10.15.3 (-> v10.15.3)
#查看当前脚本
$ node -v
v10.15.3

#3.安装npm(安装插件依赖)
$ npm -v #其实安装node后默认已经被安装
6.7.0

补充:源码安装
执行步骤:

1
2
3
4
#官网下载源码包
wget https://npm.taobao.org/mirrors/node/v10.15.3/node-v10.15.3.tar.gz
./configure --prefix=/usr/local/nodejs #注意后面这个参数
make && make install

补充:Windows环境变量
配置npm的全局模块的存放路径以及cache的路径

1
2
3
4
5
#便在NodeJs下建立“node_global”及“node_cache”两个文件夹。我们就在cmd中键入两行命令:
npm config set prefix "D:\Program Files\nodejs\node_global"
npm config set cache "D:\Program Files\nodejs\node_cache"

#设置系统变量。进入我的电脑→属性→高级→环境变量在系统变量下新建“NODE_PATH”,输入“D:\Program Files\nodejs\node_global\node_modules”



3.Nodejs简单使用
采用Node.js编写的JavaScript代码将直接在你的计算机上以命令行的方式运行;

注意:

  • 请注意绝对不能用Word和写字板,导致程序运行出现莫名其妙的错误;

进入Node.js的交互环境,在交互环境下,你可以输入任意JavaScript语句例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Node交互模式 和 命令行模式 
[[email protected] ~]$ node
> 1024 * 4
4096
> console.log("Hello wrold!Node.js")
Hello wrold!Node.js
> function add(x,y){console.log(x + "+" + y + "=",x+y)}; add(6,9)
6+9 = 15
> process #调用执行系统级别的API

# 采用js文件执行
[[email protected] Day1]# vim index.js
'use strict'; #第一行总是写上'use strict';是因为我们总是以严格模式运行JavaScript代码,避免各种潜在陷阱。
console.log('Hello, world.');

[[email protected] Day1]# node index.js
Hello World!Node.js

#利用npm安装nodemon包让文件自动检测执行js变化
cnpm install nodemon -g
-rw-r--r-- 1 root root 36 4月 11 09:25 index.js
[[email protected] Day1]$ nodemon index.js
[nodemon] 1.18.11
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
Hello World!Node.js
[nodemon] clean exit - waiting for changes before restart

(2) nodejs命令解析

2.1 nvm 命令

NVM 是一个管理多个nodejs版本工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
nvm ls           #当前版本信息
nvm ls-remote #远程版本信息
nvm install node #安装node最新版本
nvm install --lts #安装node最新稳定版本
Installing latest LTS version.
v10.15.3 is already installed.
Now using node v10.15.3 (npm v6.4.1)

Example:
nvm install 8.0.0 Install a specific version number
nvm use 8.0 #切换版本
nvm run 6.10.3 index.js Run app.js using node 6.10.3
nvm exec 4.8.3 node app.js Run `node app.js` with the PATH pointing to node 4.8.3
nvm alias default 8.1.0 Set default node version on a shell
nvm alias default node Always default to the latest available node version on a shell

##项目下面指定版本号 采用 nvm run index.js 直接执行
$ vim .nvmrc
10.15.3
$ nvm use #进行使用该版本运行(通过我们项目文件nvmrc读取版本号进行切换)

2.2 nodejs 命令
1
node --use_strict calc.js  #使用严格模式当文件内没加入'use strict'时候
2.3 npm 命令

npm其实是Node.js的包管理工具(package manager),通过CommonJS实现,大家都把自己开发的模块打包后放到npm官网上,然后通过npm安装就可以直接用;

  • 解决依赖性问题,解放双手;
  • 学习如何版本控制,下载/删除包等等操作
  • 升级 node 就升级了npm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
npm install -g cnpm --registry=https://registry.npm.taobao.org  #使用淘宝镜像安装 https://npm.taobao.org/ 来使用cnpm 进行安装(比较快)


#package.json配置信息 (项目依赖/开发依赖)
npm init #初始化项目产生 package.json 配置信息
npm install <pkg> #利用这个命令安装 package .json 里面的模块
npm install request --save #将下载的包保存在项目配置信息里面 (删除就是uninstall)
npm install babel-cli --save-dev #-D => 将下载的包保存在项目配置信息(开发依赖)里面

npm list #显示项目里面安装那些模块
npm cache clean #清除模块下载缓存

########实例#######
npm install nodemon -g #--global = 全局安装nodemon包 (外国源比较慢)
npm install forever #项目中安装该模块
npm uninstall forever -g #全局删除 forever 包

npm install n -g #更新npm与mode.js
n stable #nodejs也更新

#指定版本安装模块
npm info 模块名 #查看可用版本
npm i 模块名@版本
npm outdated #显示项目中需要更新的模块 在pakeage.json (^1.1.0)-保留主版本号不变 (~1.1.2) (*)-安装最新版本

#验证/切换源下载时间
npm i nrm -g
nrm ls #显示下载源
nrm test #测试源的链接时间
nrm use tabao #切换到淘宝源

(3) Win下IDE开发配置

我们需要一个IDE集成开发环境,让我们能在一个环境里编码、运行、调试,这样就可以大大提升开发效率。
Java的集成开发环境有Eclipse,Intellij idea等,C#的集成开发环境有Visual Studio,Node.js的集成开发环境Visual Studio Code

在VS Code中,我们可以非常方便地运行JavaScript文件。
VS Code以文件夹作为工程目录(Workspace Dir),所有的JavaScript文件都存放在该目录下。此外VS Code在工程目录下还需要一个.vscode的配置目录,里面存放里VS Code需要的配置文件。

可以用VS Code快速创建launch.json,然后修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"version": "0.2.0",
"configurations": [
{
"name": "Run hello.js",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/hello.js",
"stopOnEntry": false,
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": null,
"runtimeExecutable": null,
"runtimeArgs": [
"--nolazy"
],
"env": {
"NODE_ENV": "development"
},
"externalConsole": false,
"sourceMaps": false,
"outDir": null
}
]
}

有了配置文件,即可使用VS Code调试JavaScript。
1
2
3
4
'use strict'
var name = "Weiyi";
var hel = `你好,${name}Geek 欢迎学习NODE.JS`;
console.log(hel);

WeiyiGeek.VScode

WeiyiGeek.VScode

(4) nodejs入坑记

Q;问题1安装node.js爆出C++版本过低?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
问题:Centos6.10 升级 C++ compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)

#解决方式:由于yum不能进行升级所以手动
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz
tar -zvxf gcc-6.1.0.tar.gz --directory=/usr/local/
cd /usr/local/gcc-6.1.0
./contrib/download_prerequisites
mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make && make install

#上面下载依赖可以自己进行下载
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2

##安装完成
$ ls /usr/local/bin | grep gcc
gcc
i686-pc-linux-gnu-gcc

$ gcc -v
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/6.1.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posix
gcc version 6.1.0 (GCC)

#(重要)升级gcc生成的动态库没有替换老版本gcc的动态库 (注意系统版本 是i686 是 x64_86) 下面以i686为例
find / -name "libstdc++.so*" #查找编译gcc时生成的最新动态库:
#最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下
cp /usr/local/gcc-6.1.0/build/i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib/
rm -rf libstdc++.so.6 #删除原来软连接:
ln -s libstdc++.so.6.0.22 libstdc++.so.6 #将默认库的软连接指向最新动态库
strings /usr/lib/libstdc++.so.6 | grep GLIBC #默认动态库升级完成运行以下命令检查动态库:
GLIBCXX_3.4.22


Q;问题2安装node.js爆出Python+版本过低?

1
2
3
#由于前面安装的是centos6.10 默认版本python2.6
wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz
./configure --enable-optimizations --prefix=/usr/local/python2.7