新识NodeJS

1.JavaScript 模块化规范

  • 浏览器环境

    • AMD
      • Asynchronous Module Definition
      • RequireJS
    • CMD
      • Common Module Definition
      • SeaJS
  • Node 环境

    • CommonJS
      • Node.js
      • CommonJS 是一个社区,该社区为 JavaScript
        没有际遇之圈子指定了森的专业(社区制定的)
      • JavaScript 模块化、IO操作、网络编程、二进制操作
  • ECMAScript(任何环境还足以)

    • ECMAScript 6、ECMAScript 2015
    • ECMAScript Module 定义规范
    • export 关键字用于导出接口
    • import 关键字用于加载模块接口
    • 以风行版本的 Node 中,对 ES6
      中模块系统还从未协助,但是足以经过 babel 等息息相关工具转换使用
  • UMD

    • Universal Module Definition 通用模块定义规范
    • UMD 不是另模块规范,也未是模块加载器
    • 一个模块既兼容 AMD 、CMD、CommonJS、 ECMAScript 6
      这这一个模块就是一个 UMD 模块
    • 目标是以在另模块加载器中都得一向加载
    • 诚如是举行有内外端模块并用之,不关乎具体条件因的API,例如 underscoremoment 就是一个超人的例子

2.Node.js 介绍

以下简称 Node。

破天荒意义的 Node ,开启了大前端时代 node 让后面端上了工业自动化时代
node 还让原的粗前端可以起机会踏入后端开发领域,使用 JavaScript
语言举行服务器编程 不言而喻:学习了 Node
,就开启了前者工程师的 全栈开发 之同

ECMAScript 1

  2.1 客户端和服务器

  ECMAScript 2

  

  2.2 几独问题

  •   什么是 JavaScript

    • 同一种运行于浏览器端的脚本语言。
    • JavaScript + DOM + BOM
    • ECMAScript + W3C
    • ECMAScript + BOM + DOM
    • BOM和DOM等仍然浏览器环境提供的接口API,供 JavaScript
      语言来调用。
  • JavaScript 和 ECMAScript 是啊关系

    • ECMAScript 是 JavaScript 语言的标准规范
      • var、if-else、for、Object、Array、String。。。
    • JavaScript 是 ECMAScript 标准规范的一个实现
  • 浏览器与 JavaScript 是呀关系

    • JavaScript 是运作于浏览器环境受到之
    • 夜宿关系
    • 浏览器就是 JavaScript 的一个实施环境
  • 浏览器中的 JavaScript 可以进行什么

    • DOM操作、表单验证、动画、ajax 请求
  • 从效益角度 浏览器被的 JavaScript 和外语言来啊区别

    • 弱类型
    • 浏览器被的 JavaScript 专注于处理 GUI 编程(图形界面)
    • 文件操作
      • HTML5吃来一个
        FileReader(只可以读取用户通过file类型的input标签选取的文件)
      • 浏览器中之 JavaScript 没有积极性操作文件的权力
    • 网络IO
      • 接网络被传过来的多少,处理网络中传过来的多寡,发对方发送响应
  • ECMAScript 只可运行在浏览器被吗

    • JavaScript 不仅仅可以运行在浏览器环境面临
    • 呢可以运行在其余环境、平台 

  2.3 什么是Node 

     Node官方网站

  • Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript
    engine.

    • NodeJS 是一个构建与 Chrome V8 JavaScript
      解析引擎之上的一个运转时环境
    • Chrome V8 开源的
    • Chrome V8 引擎在颇具浏览器的 JavaScript 解析引擎中凡可是抢的
    • 维基百科 –
      JavaScript引擎
  • Node.js uses an event-driven, non-blocking I/O model that makes it
    lightweight and efficient.

    • event-driven:事件驱动
    • non-blocking I/O model:非阻塞IO模型
    • lightweight and efficient:轻量和便捷
    • Node 本身知识提供了有的系级别操作API
  • Node.js’ package ecosystem, npm, is the largest ecosystem of open
    source libraries in the world.

    • package ecosystem, npm:包管理系统 npm
    • largest ecosystem of open source libraries in the world.
      • ECMAScript,当下世界上最好深的开源库生态系统
      • 50W + 就哼于 Sublime编辑器一样,本身才供好简短的功用
      • 大部分还亟需负社区被的插件、包来开发咱们的应用程序
      • 要马耳他语好,占优势
      • npm 两叠意思:
        • 先是凡是平就此来托管基于Node开发的担保的
        • 第二凡是一个命令行工具,可以就此来下载npm网站及托管的Node包
        • 发生矣 npm,就相会化全傻瓜式的出
        • 间接以来解决你的题目便得了,能于您越小心让事情的拍卖
  • Node 是遵照 Chrome V8 解析引擎之上构建的一个 JavaScript
    运行时环境,或者说平台

    • 以 Node 中,可以以 JavaScript 语言举办编程吧
  • Node 能分析和施行 JavaScript(ECMAScript) 代码

  • Node 是一个阳台,让 JavaScript 可以退浏览器环境运行
  • Node 自身以 c++ 语言描绘有了重重系统级别相关的 API,显露了部分
    JavaScript 环境 API

    • 诸如文件操作
    • 纱操作
    • 。。。
  • 动 Node 可以轻松的拓展文件系统访问、HTTP 服务器出等效果
  • 免费开源

  2.4 使用 Node 可以开啊

  ECMAScript 3

  • 愈性能的网站服务器
  • 实时两人游戏后高服务器
  • 概括容易用的命名行应用程序
    • gulp、less、bower、fis、http-server
    • ant、ruby、.net nuget
  • 宏伟上的桌面应用程序
    • 以 Web 技术 作为化解方案
    • electron Linus + Max + Windows
  • 脚的物联网开发
    • 树莓派
  • 运动开
    • Ionic 安卓 IOS
    • 下 Web 技术作为化解方案

  2.5 Node 的特点

  • Single Thread:单线程
  • event-driven:事件驱动
  • non-blocking I/O model:非阻塞IO模型
    • 文本IO、网络IO 基本上仍旧异步的
    • 故而当 Node 中会师见到各式各类的花式回调
  • Node 采纳的凡 事件驱动和非阻塞IO模型 使它自己很之轻量级和高速。
  • 开源免费、跨平台 

  2.6 为啥要读 Node 

  • Node 打破了千古 JavaScript 只好当浏览器中运作的框框
  • 上下端编程环境统一,大大降低了上下端语言切换的代价
  • 全栈开发工程师
    • 后端开发工程师
    • 前端开发工程师
    • 挪端支付工程师
  • 前端 + 后端 

  2.7 总结

  Node 是基于 Chrome V8 引擎,一个 JavaScript 运行时环境。 Node
可以分析及履行 JavaScript(ECMAScript) 脚本代码,
而且提供了累累网级别之API(文件读写、进程管理、网络通信)。

  Node
不是一个初的言语,而且一个运转时环境,类似于浏览器环境或说平台,
可以为此来分析和推行 JavaScript 语言代码。

  JavaScript 长久以来一贯为限定在浏览器的沙箱中运行,
它的力在浏览器中间层提供的支撑小。 Node 将高性能的 V8
带至了服务器端,使 JavaScript 也得以支付出实时胜性能的服务器。 在 Node
中,不再和CSS样式表,DOM树打交道, 可以随便的拜会当地文件,搭建
WebSocket 服务器,连接数据库等系统级底层操作。
Node 不处理 UI,只关心数据,无论是地点数据或者网络数据。
前后端编程统一,大大降低了内外端编程切换的代码。

  对于前端工程师而言,自己了然的 JavaScript
近日仍可以够于另一个地点大放异彩,
不摆其他原因,仅仅为好奇,也值得去关爱同追究它。

JavaScript 全栈开发工程师,JavaScript 语言的权利就越来越重了。

  2.8 Node 学习资源引进

3.设置以及安排 Node 开发条件

  3.1 普通形式安装

  • 下载地址:https://nodejs.org/en/download/
  • 产同样步下同样步就是可 

  3.2 使用 nvm 安装与管理几近只 node 版本

  • nvm node version management
  • nvm 是一个下令行程序,可以异常便宜的设置和保管大多单 Node 版本
  • 下载地址:https://github.com/coreybutler/nvm-windows

  3.3 咋样验证是否发Node环境

  打开终端,输入 node -v

  $ node -v
  $ vx.x.x

  假设会看到输出一个版号,例如 v6.8.1 的文件,表达时电脑来
Node环境。

4.高速体验

  4.1 Hello World

  使用 node 命令执行一个 JavaScript 脚本文件:

  1. 开辟任意终端
  2. 使用 cd 命令切换至要执行之 js 脚本文件所属的目录
  3. 使用 node 文件名 去执行相应之 js 脚本文件
  4. node 会解析及执行该文件被的代码,然后以推行结果输出及极限

  当您于终端中输入 node example.js, 实际上就是是应用安装目录中的
node.exe 可执行程序, node.exe 程序会自行读取该文件被的内容,
读取到拖欠公文内容后,node 环境初步解析和实施, 如若有 console.log
这样的代码,node 会将欠出口打印及控制长沙。

  • 只顾1:文件名不要使用 node 命名

  • 留意2:文件称和途径最好不用用中文,路径中呢绝不要闹空格 

  4.2 文件IO:读写文件

var fs = require('fs')

// 读取文件
// fs.readFile('./README', function(err, data) {
//   if (err) {
//     // return console.log('读取文件失败了')
//     throw err
//   }
//   console.log(data.toString())
// })

// 写入文件
fs.writeFile('./a.txt', 'hello aaa', function (err) {
  if (err) {
    throw err
  }
  console.log('文件写入成功')
})

  4.3 网络IO:HTTP服务器

var http = require('http')

// 1. 创建 HTTP 服务器,得到一个 服务器实例对象
var server = http.createServer()

var money = 0

// 2. 给 Server 对象添加 request 事件处理函数
// 回调函数需要接收两个参数:
//    第一个参数:Request,用来获取当前客户端的请求信息
//                Request 对象可以获取客户端请求中的 url 请求地址、查询字符串、post 请求提交的数据等
//    第二个参数:Response 也是一个对象,一般用来给本次请求发送响应数据
server.on('request', function(request, response) {
  money++

  // 告诉客户端,本次响应的数据是文本类型,utf-8 编码
  response.writeHead(200, {
    'Content-Type': 'text/plain; charset=utf-8'
  })
  response.write('回家过年了,今年赚了:' + money + ' RMB')
  response.end()
})

// 3. 通过 Server 对象的 listen 函数,设置一个监听的端口号,启动服务器
server.listen(3000, function() {
  // 当服务器开启监听成功之后,会触发该回调处理函数
  console.log('server is running at port 3000.')
})

 

5.Node 基础

  5.1 Node 中的 JavaScript

  • REPL运行环境

    • R:read
    • E:Eval
    • P:Print
    • L:Loop
  • ECMAScript

    • Node 对最新的 ECMAScript 语言专业援助的大好
    • 对流行的 ES6 协理了将近 96% 的语法
    • Node 除了官方的 ECMAScript 语言专业
    • 以以 console 对象、定时器等函数也移植到 Node 中
  • 大局对象

    • global
      • 相对于浏览器被的的大局对象 window
      • 全局效用域和模块功用域的定义
    • Console
      • log
      • info
      • warn
      • error
    • process
      • 过程对象
    • Buffer
  • 全局函数

    • setInterval 和 clearInterval
    • setTimeout 和 clearTimeout
    • setImmediate 和 clearImmediate
  • 模块内成员

    • dirname 和 filename
    • require
    • exports
    • module

     5.2 Node 中之模块系统

  • Node 根据 CommonJS 规范落实了自己之均等仿照模块系统
  • 一个单身的文本就是一个模块
    • 如何定义模块:
    • Node 天生就是曾实现了一个模块系统缓解方案
    • 默认在Node中运作的 JavaScript
      脚本文件,就是一个模块,而且是个人功用域
  • 列一个模块都是一个独立的功能域
    • 没浏览器中 window 全局功效域的定义了
  • 每个文件对外接口是 module.exports 对象
  • require 方法用于加载模块
    • 进行为加载模块中的 JavaScript 代码
    • 赢得模块的 module.exports 接口目的
  • 基本模块和文件模块

6.调试 Node

  一个妙不可言的开发人员调试能力很重大
任何一个平台的付出还去不开调试,调试不仅仅是工具,更多之凡套路

  6.1 关于 Debug

  所谓的 Debug
,也就是是找到并删除缺陷的长河,这个过程为,其实为是出于套路规则而论的,以下是本人总的一对调节经验:

  • 系统化注释掉或者剥夺代码块:排除法
  • 浅析网络数据流,确定问题是客户端仍旧服务器
  • 动前能用之输入,并一点自然地修改输入,直到问题表现
  • 因此版本控制逐次回退,直到问题没有

     6.2 Node 中的 Debug

  • console.log
  • node-inspector
    • 这多少个一个足当浏览器被调剂 Node 的一个器
  • visual studio code
    • 立即吗是一个编辑器,内部类似于
      Webstorm,也拼了一个调节Node代码的职能
  • Webstorm