注:为了本教程的准确性,部分描述引用了官网及网络内容。前端
Node.js 概念
Node.js本质上是使用Google的V8引擎制做出来的服务框架。V8自己是Google为了解决Chrome浏览器的性能问题而制做的前端引擎(开源)。自己依托于浏览器引擎,这也是为何Node.js使用的是前端的JavaScript语言编程。node
V8的诞生是Google为了解决JavaScript的性能问题,用了内联缓存和隐藏类技术实现的前端引擎。V8使用C++编写,也所以V8能够在C++项目中完美兼容使用。express
V8被Google使用在大多数产品中,如Chrome浏览器,安卓浏览器等。npm
V8引擎在不断升级,Node.js自己也在不断更新,在下载Node.js安装包时就携带对应版本的V8引擎。若须要查看V8版本,在CMD中输入:编程
1 node -p process.versions.v8
如须要查看Node.js的版本,输入:浏览器
1 node -v
Node.js基础原理
在Node.js中最主要的特性,即事件驱动与非阻塞I/O都与其底层的特殊实现有关。在Node.js的底层有一个事件轮循器(Event Loop)。每当有事件注册时,会先将事件放置到事件队列(Event Queue),并经过事件轮循器顺序执行事件队列。当轮循到一个事件时,事件轮循器会为其分配一个工做线程(Worker Threads)执行该事件,事件完成后经过执行回调(Callback)返回到事件列表并经过V8引擎传递给应用(Application)。缓存
其详细步骤为:服务器
一、应用层发出请求给V8网络
二、V8经过Node.js的中间层(Bindings)传递给底层(Libuv)框架
三、在Libuv层中,请求会按顺序放置在事件队列(Event Queue)
四、事件轮询器(Event Loop)依次为事件队列中的事件分配工做线程(Worker Threads)
五、工做线程完成事件,并经过执行回调(Callback)返回事件列表
六、事件的执行结果经过中间层及V8返回给应用
在应用层中,发送请求后会继续执行应用层后续代码,而不须要等待事件的完成,因此是异步处理。事件处理完成后经过回调返回到应用。整个过程只由一个主线程完成,所以不存在死锁、等待的状况。
这就是Node.js的事件驱动与I/O非阻塞的实现原理。
其中,V8是Node.js依赖的核心库,而Bindings层及Libuv层是Node.js中用C++写的原创底层。
最上层的standard library是用JavaScript写的Node.js基础库。里面有各类经常使用的API,如:http模块、fs模块等。咱们实际中最经常使用的就是standard library层。
其余概念
npm是Node.js的包管理工具,能够经过npm下载已有的第三方包到本身的项目中,也能够上传本身代码给别人使用。npm会随Node.js的安装包一并安装。
查看npm版本:
1 npm -v
其余经常使用的npm命令:
1 npm view XX version 查看版本(如:npm view express version) 3 npm install XX --save 安装包 5 node XX.js 启动一个服务入口(如:node index.js) 7 npm run dev 启动客户端 npm run build 启动发布
REPL(交互式解释器)能够输入代码实时执行,用以测试JavaScript代码块。主要用在Linux等非图像界面服务器的代码调试场景中。
安装Node.js
1.下载node.js :https://nodejs.org/en/download/
2.安装完成后,环境变量会在安装过程当中自动设置好。若使用的是zip压缩版解压的node.js,则需手动配置环境变量Path:
3.打开cmd,命令行:“node --version”检查Node.js版本,显示正确的版本号即安装成功。
4.配置npm源(重要)
--全局配置切换到淘宝源(推荐此项,由于外网链接不稳定):
命令行: npm config set registry https://registry.npm.taobao.org
--全局配置切换到官方源:
命令行: npm config set registry http://www.npmjs.org
--查看当前源:
命令行: npm config get registry