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 ,就开启了前端工程师的 全栈开发 之旅

  2.1 客户端和服务器

  

  

  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.
      • 目前世界上最大的开源库生态系统
      • 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 可以做什么

  

  • 高性能的网站服务器
  • 实时多人游戏后台服务器
  • 简单易用的命名行应用程序
    • 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

初识NodeJS的更多相关文章

  1. 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境

    思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript.那么我们就容易认为JavaScript ...

  2. Nodejs学习笔记(一)——初识Nodejs

    前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进.起初准备好好研究下Spring这个框架,下载了源码,结合书籍准备一探究竟,看 ...

  3. 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点

    一.NodeJS简介 NodeJS是开发服务器后台的东西,和PHP.JavaEE.python类似,和传统的浏览器的关注DOM的JS完全不同,将JavaScript触角伸到了服务器端.内核是Chrom ...

  4. 【nodejs】初识 NodeJS(二)

    上一节我们构建了一个基础的 http 服务器,我们可以接收 http 请求,但是我们得做点什么吧 – 不同的 http 请求,服务器应该有不同的响应. 路由模块 处理不同的 http 请求在我们的代码 ...

  5. 【nodejs】初识 NodeJS(一)

    构建一个基础的 http 服务器 需要引用 http 模块,http 模块是 node.js 的内置模块. var http = require('http'); http.createServer( ...

  6. 【nodejs】初识 NodeJS(四)

    上节我们把服务器.路由和请求处理程序结合在一起了,下面就编写一个具体的 web 应用. 上传图片的 web 应用 服务器模块(server.js) var http = require('http') ...

  7. 【nodejs】初识 NodeJS(三)

    上节我们将 http 服务器(server.js)和请求路由模块(route.js)整合在一起了,当然这还不够,路由,顾名思义,是指我们要针对不同的 url 有不同的处理方式. 请求处理程序模块(re ...

  8. 初识NodeJS服务端开发(Express+MySQL)

    http://www.alloyteam.com/2015/03/sexpressmysql/

  9. Nodejs学习笔记(二)——Eclipse中运行调试Nodejs

    前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...

随机推荐

  1. ubuntu 14.04LTS 环境下配置NFS服务

    简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...

  2. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. svn迁移gitlab,构建前端打包发布流程

    前端资源迁移     目前公司的前端资源托管在svn服务器上,由于团队的逐渐扩大,svn的分支管控越来越不灵活,而且对于以后前端流程一体化的处理支持不是很好,因此决定在版本控制上转向git.git的好 ...

  4. android使用ImageLoader实现图片缓存(安卓开发必备)

    相信大家在学习以及实际开发中基本都会与网络数据打交道,而这其中一个非常影响用户体验的就是图片的缓存了,若是没有弄好图片缓存,用户体验会大大下降,总会出现卡顿情况,而这个问题尤其容易出现在ListVie ...

  5. Javascript中关于cookie的那些事儿

    Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...

  6. .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用

    在我们开发的很多分布式项目里面(如基于WCF服务.Web API服务方式),由于数据提供涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器 ...

  7. C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

    在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务 ...

  8. windows go安装

    1.安装git 因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:http://www.git-scm.com/download/. git安装比较简单,直接下一步即可( ...

  9. 关于mysql字段时间类型timestamp默认值为当前时间问题

    今天把应用部署到AWS上发现后台修改内容提交后程序报错,经过排查发现是更新数据的时候,有张数据表中的一个timestamp类型的字段默认值变成了"0000-00-00 00:00:00.00 ...

  10. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制

    原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...