四六、node.js学习笔记(1)

Node介绍

五个问题
  • 什么是JavaScript?
    • JavaScript是一种运行在浏览器中的脚本语言
    • 我们之前的所知道的 JavaScript 是指:ECMAScript + BOM + DOM
  • 浏览器与JavaScript是什么关系?
    • 寄宿关系 js脚本代码必须放到浏览器中帮我们解析和执行
  • 浏览器中的JavaScript可以做什么?
    • 操作DOM
    • 表单验证
    • 发送 ajax 请求
    • 动画效果
  • 浏览器中的JavaScript不可以做什么?和其它语言相比
    • 文件操作 (CRUD)安全性无法保证
    • 浏览器中的 js 只能发送请求,但是不能处理别的客户端发送给自己的请求
    • 无法操作 操作系统 相关的信息
  • JavaScript只可以运行在浏览器中吗?
    • JavaScript 不仅仅能够运行在浏览器中 运行在浏览器中的解析引擎中
    • 不同的浏览器有不同的解析引擎
    • 在所有的浏览器的js解析引擎中,Chrome 的 V8 引擎是公认最快的
    • 引擎的特性就是:可移植
    • Node 就是一个将Chrome 的V8 引擎给移植出来的一个 执行环境
  • 在开发人员能力相同的情况下编程语言的能力取决于什么
    • 编程语言的能力最主要取决于你的执行环境
    • 一般来说这些能力都是 执行环境给你提供的接口
    • 同样的语言在不同的环境下就可以做不同的事
什么是 Node

https://nodejs.org/en/

  • Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
    • JavaScript runtime : JavaScript 运行时环境
    • built on Chrome’s V8 JavaScript engine :构建与Chrome的V8引擎之上
    • Node是JavaScript吗?
      • Node 不是 JavaScript
      • Node 可以用来解析和执行 JavaScript,是一个 JavaScript 运行环境
    • 或者说 Node 是一个平台、环境更合适
  • Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
    • event-driven 事件驱动
    • non-blocking I/O model 非阻塞I/O模型
    • lightweight and efficient 轻量和高效
  • Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
    • Node的 包生态系统 npm(基于Node开发的一些库、框架)
    • npm Node Package Management
    • Node 的 包生态系统 npm 是全球最大的开源库生态系统
使用 Node 可以做什么
  • 做动态网站(把之前写的静态页面给动态化)数据的动态展示
    • Node充当的就是一个后台Web服务器的作用(接收请求,处理请求,发送响应)
  • 最主要的就是:Node可以充当一个Web服务器
    • 无论是网站后台服务器
    • 还是游戏后台服务器
    • 例如可以开发电商网站、个人博客系统、聊天程序
  • 其实都是在处理数据的交互
    • 做 Node 开发,就和 dom、css 没有任何关系了,只需要关系如何处理数据即可
      • 例如文件中的数据
      • 例如网络中的数据

安装与配置

  • 普通安装包方式
  • 使用 nvm 安装和管理 Node
  • 通过在终端中输入 node -v 验证是否安装成功

REPL环境

REPL就好比浏览器中的控制台,
可以使用该REPL环境做一些代码或者API的测试

  • 通过在终端中输入 node 命令之后敲回车就可以进入
  • 通过连续按两次的 ctrl+c 就可以退出 REPL 环境

使用 node 命令执行一个文件

  • node.exe 程序会读取该文件
  • 然后解析和执行该文件中的代码
  • 将程序中有输出的代码输出到终端中

node 本身就是一个运行在终端中的一个可执行程序(.exe),可以通过给这个程序传递一些参数,
例如 node -v 就可以查看Node的版本

或者 node foo.js 就可以使用这个 node.exe 去帮我们解析和执行一个 js脚本文件

终端介绍

终端也叫做控制台,有人也叫 bash(在Linux中),terminal
终端一般就是可以用来输入一些命令,然后把改命令的执行结果输出到终端中。
在计算机中,所有通过可视化界面能做到的操作都可以通过 命令 来完成。

  • 进入控制台

    • 按住 win+r 打开运行
    • 输入 cmd 敲回车就进入了终端环境
    • 控制台默认进入当前用户目录
  • 什么是终端

  • 常用命令

    • dir directory 列出当前目录下所有的条目
    • cd change directory 表示切换目录
      • cd 目录名 表示进入该目录
      • cd …/ 表示切换到上一级目录
      • 如果想切换盘符,例如现在在 c 盘。想要进入 d 盘,直接输入 d:
    • cls clear screen

当在终端中输入一些命令的时候,敲击回车,
终端会首先在当前目录下找有没有该命令对应的可执行文件。
如果找到,直接启动运行。

如果找不到,怎么办?

我想要在任何目录下输入 subl 打开 sublime

path环境变量

目的是为了在控制台中的任何目录都可以快速打开或者使用该可执行文件

  • 添加环境变量
    • 我的电脑 -> 右键选择属性 -> 高级系统设置 -> 切换到高级面板 -> 环境变量
    • 第一种方式:直接把可执行文件所属的目录 放到 PATH 环境变量中(如果没有PATH环境变量,自己新建)
    • 第二种方式:新建一个环境变量,变量名规范:逻辑名_HOME 变量值:该可执行文件所属的目录
    • 注意:无论是直接添加的路径还是引用的变量名,一定要用 英文的分号 区分开
    • 引用变量名的时候,变量名两边都是 %

在用户变量中找没有一个叫做 PATH 的变量名,
如果没有,自己手动新建一个.

添加完环境变量之后,记得一定要把终端重启一下。

然后把要添加的绝对路径放到 PATH 的变量值中,以 英文的;作为分隔

例如:在终端中输入:> feiq

当你在控制台中输入一个程序的名字的时候,cmd 默认把它当成一个可执行文件去执行了,
优先找当前目录下是否有没有一个叫做feiq.exe 的可执行文件,如果有,直接执行打开
如果没有,cmd会进入 path 环境变量中 一个目录一个目录的挨着查找里面是否有该可执行文件

nvm 安装和管理 Node

问题:切换 Node 版本和麻烦

Node 基础

Node 本身就是一个轻内核的,高度模块化的一个平台。

除了以下列出的这些元素之外,其它功能都在模块中,如果使用就需要单独加载。

全局对象
  • global
    • The top-level scope is not the global scope; var something inside an Node.js module will be local to that module.
    • 类似于浏览器中的 window 对象
    • 在 Node 中没有全局作用,都是模块作用域
  • process
  • console
全局函数
  • setTimeout() 和 clearTimeout()
  • setInterval() 和 clearInterval()
  • setImmediate() 和 clearImmediate()
伪全局对象
  • exports
  • module
  • require
伪全局变量
  • __filename
    • 获取到的是当前文件的绝对路径(包含文件名+后缀名)
  • __dirname
    • 获取到当前文件所属的目录的绝对路径

CommonJS 规范

CommonJS 规范不是专门为 JavaScript模块化制定的规范,而是为 JavaScript 语言
很多在后台没有实现的 功能制定的 API 规范:

例如:文件操作、网络操作、进程操作等接口API

为 JavaScript 语言本身在后台的功能实现定义了很多 API,其实就包括 模块化的规范 API

  • 一个单独的文件就是一个模块
  • 所有代码都运行在模块作用域,不会污染全局作用域
  • 每个文件模块的对外接口是module.exports对象
  • require命令用于加载模块文件的接口对象 module.exports
  • 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。
  • 模块加载的顺序,按照其在代码中出现的顺序
    • 同步加载,同步执行

AMD 是 预加载,预执行

预加载就是把所有的 js文件模块都下载下来,都是异步并行加载所有脚本文件
预执行就是每加载成功一个就执行一个

CMD 是 预加载,懒执行
预加载就是把所有的 js文件模块都下载下来
懒执行就是等所有 js 文件都加载完毕之后了才去执行

AMD 和 CMD 加载文件模块本质上都是通过网络去下载脚本文件

CommonJS 是执行到了哪里,就加载哪里,然后执行哪里,同步加载,同步执行
CommonJS 在加载文件模块的时候,都要去读取该文件

在 Node 中使用 CommonJS 模块规范进行编程

module.exports 和 exports
require

基本功能:

  • 读取并执行一个JavaScript文件
  • 然后返回该模块的module.exports对象
  • 如果没有发现指定模块,会报错、
    • can not find module

require 方法的参数一般叫做表示 模块标识

加载规则:

  • 参数以 ./../ 开头的相对路径文件模块
    • require 方法的指定的模块标识相对路径永远是相对于 require 所处的模块的
  • 绝对路径文件模块
  • 参数字符串不以 ./../ 的核心模块
    • 核心模块本质上也是文件模块
    • 核心模块已经在编译的时候被编译到了 node.exe 的可执行文件中了
  • 模块标识可以省略后缀名
    • 省略后缀名会按照 .js .json .node 的顺序进行查找
    • .js 会按照 JavaScript 脚本进行解析
    • .json 会以 JSON.parse() 进行解析
    • .node 会以编译后的二进制进行文件解析

核心模块

  • http
  • net
  • dns
  • url
  • fs
  • path
  • util
  • os

Node 调试

  • console.log()
  • Visuao Studio Code
  • WebStorm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值