如下是正文。node
引擎的特性:git
JS的内核即引擎。由于引擎有如下特性:github
(1)转化的做用:web
汽油柴油等等->动能express
模板+数据--->页面npm
js引擎:js 代码--->机器码\字节码segmentfault
(2)移植性。windows
有哪些引擎:浏览器
备注:Node是用V8引擎去解析 js,此时,咱们不用去考虑浏览器的兼容性问题。
一、官方解释:
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js使用了一个事件驱动、非阻塞式I/O的模型( Node.js的特性),使其轻量级又高效。 Node.js 的包管理器 nmp 是全球最大的开源库生态系统。
如上图所示:
Node 内部采用 Google Chrome 的 V8 引擎,做为 JavaScript 语言解释器;
经过自行开发的 libuv 库,调用操做系统资源。
二、非官方解释:
Node.js:是 JavaScript 语言在服务器端的运行环境(平台)。
三、运行环境(平台)的含义:
首先,JavaScript 语言经过 Node 在服务器运行,在这个意义上,Node 有点像 JavaScript 虚拟机。
其次,Node 提供大量工具库,使得 JavaScript 语言能与操做系统互动(好比读写文件、新建子进程),在这个意义上, Node 又是 JavaScript 的工具库。
总结:
Node.js 是一个 JavaScript 的运行环境(平台),不是一门语言,也不是 JavaScript 的框架。
2008年左右,随着 AJAX 的逐渐普及,Web 开发逐渐走向复杂化,系统化;
2009年2月,Ryan Dahl 想要建立一个轻量级,适应现代 Web 开发的平台;
2009年5月,Ryan Dahl 在 GitHub 中开源了最第一版本,同年11月,JSConf 就安排了 Node 讲座;
2010年末,Joyent 公司资助,Ryan Dahl 也加入了该公司,专门负责 Node 的开发;
2011年7月,在微软的支持下登录 Windows 平台。PS:node 的生产环境基本是在 Linux 下。
据 Node.js 创始人 Ryan Dahl 回忆,他最初但愿采用 Ruby,可是 Ruby 的虚拟机效率不行。
注意:是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。
如下几个项目都用到了 Node:
还有如下几个网站:
LinkedIn移动版From RoR to Node.js, base on Joyent
Paypal From Java to Node.js
Twitter的队列:收集须要保存的Tweets,传给负责写入的进程
知乎的推送
网易、阿里、各类创业团队等
RESTFul API
实时通讯:如消息推送等
高并发
I/O阻塞
express:Node.js中最有名的web服务器框架。
PM2:node 原本是单进程的,PM2能够实现和管理多进程。
jade:很是优秀的模板引擎,不只限于 js 语言。
CoffeeScript:用简洁的方式展现 JavaScript 优秀的部分。
Atom:文本编辑器。
socket.io:实时通讯框架。
mocha:功能强大的 node.js 测试框架。
去 Node.js 的官网下载安装包:
咱们也能够在https://nodejs.org/en/download/releases/上下载历史版本。
注意,咱们以必定要用偶数版(V四、V6等),不要用奇数版(好比V5),由于奇数版不稳定。
咱们并不推荐直接采用 Node.js.msi 安装包进行安装,不方便 node 的更新,缘由以下:
之前版本安装的不少全局的工具包须要从新安装;
没法回滚到以前的版本;
没法在多个版本之间切换(不少时候咱们要使用特定版本)。
所以,咱们暂时先不用安装 Node.js,稍后用 NVM 的方式来安装 Node.js。
NVM:node.js version manager,用来管理 node 的版本。安装的步骤以下。
(1)咱们去官网下载 NVM 的安装包:
下载下来后,直接解压到 D:\web
目录下:
(2)在上面的目录中,新建一个settings.txt
文件,里面的内容填充以下:
root: D:\web\nvm path: D:\web\nodejs arch: 64 proxy
上方内容的解释:
root 配置为:当前 nvm.exe 所在的目录
path 配置为:node 快捷方式所在的目录
arch 配置为:当前操做系统的位数(32/64)
proxy 不用配置
(3)配置环境变量:
NVM_HOME
= D:\web\nvm
(当前 nvm.exe 所在目录)
NVM_SYMLINK
= D:\web\nodejs
(node 快捷方式所在的目录)
PATH += ;%NVM_HOME%;%NVM_SYMLINK%
配置成功后,重启资源管理器。
验证:(在 cmd 中输入命令)
(1)输入nvm
命令查看环境变量是否配置成功:
(2)输入 nvm ls
,查看已安装的全部 node 版本。
(3)输入 nvm -v
,查看 已安装的 nvm 版本。
(4)输入 node -v
,查看正在使用的 node 版本。
若是 node 安装失败,能够参考上面这个连接。
打开 终端.app,输入:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash source ~/.nvm/nvm.sh
安装之后,nvm的执行脚本,每次使用前都要激活,建议将其加入~/.bashrc文件(假定使用Bash)。激活后,就能够安装指定版本的Node。
也可使用 Homebrew 安装(更方便,维护更简单):
brew install nvm
安装指定版本的node:
nvm install 版本号 [arch]
好比:nvm install 4.2.2
。
卸载指定版本node:
nvm uninstall 版本号
切换使用指定版本的node:
nvm use 版本号 [arch]
查看当前使用的 nvm 版本:
nvm -v
查看本地安装的全部的 node 版本:
nvm list|ls
在 查看 node 的版本:
$ node -v
执行脚本字符串:
$ node -e 'console.log("Hello World")'
运行脚本文件:
$ node index.js $ node path/index.js $ node path/index
查看帮助:
$ node --help
进入 REPL 环境:
$ node
REPL 的全称:Read、Eval、 Print、Loop。相似于浏览器的控制台。
若是要退出 REPL 环境,能够输入.exit
或 process.exit()
。
在 VS Code 里,咱们能够在菜单栏选择“帮助->切换开发人员工具”,打开console控制台。
因为 Node 是一套轻内核的平台,虽然提供了一系列的内置模块,可是不足以知足开发者的需求,因而乎出现了包(package)的概念:
与核心模块相似,就是将一些预先设计好的功能或者说 API 封装到一个文件夹,提供给开发者使用。
Node 自己并无太多的功能性 API,因此市面上涌现出大量的第三方人员开发出来的 Package。
若是 Node中自带的包和第三方的包名冲突了,该怎么处理呢?原则是:
先在系统核心(优先级最高)的模块中找;
而后到当前项目中 node_modules 目录中找。
好比说:
requiere(`fs`)
那加载的确定是系统的包。因此,咱们尽可能不要建立一些和现有的包重名的包。
包的生态圈一旦繁荣起来,就必须有工具去来管理这些包。NPM 应运而生。
NPM:Node Package Manager。官方连接: https://www.npmjs.com/
随着时间的发展,NPM 出现了两层概念:
一层含义是 Node 的开放式模块登记和管理系统,亦能够说是一个生态圈,一个社区。
另外一层含义是 Node 默认的模块管理器,是一个命令行下的软件,用来安装和管理 Node 模块。
NPM 不须要单独安装。默认在安装 Node 的时候,会连带一块儿安装 NPM:
NVM、Node、NPM 安装以后,目录分布以下:
输入 npm -v
,查看 npm 的版本:
若是上方命令无效,多是以前的 node 并无彻底安装成功。解决办法:http://www.javashuo.com/article/p-ncvrxfef-er.html
另外,Node 附带的 NPM 可能不是最新版本,能够用下面的命令,更新到最新版本:
$ npm install npm -g
因为 NPM 的资源都在国外,有时候会被墙,致使没法下载或者很慢。此时能够用到NRM。
NRM:Node Registry Manager。做用是:切换和管理包的镜像源。项目地址:https://www.npmjs.com/package/nrm
安装 NRM:
npm install -g nrm
NRM 的经常使用命令:
nrm ls //显示所有的镜像 nrm use taobao // 使用淘宝的镜像
效果入下:
推荐的国内加速镜像:https://npm.taobao.org/
想学习代码以外的软技能?不妨关注个人微信公众号:生命团队(id:vitateam
)。
扫一扫,你将发现另外一个全新的世界,而这将是一场美丽的意外: