NodeJS 是什么?

Node.js 是基于 “ Chrome V8 引擎 ” 的 JavaScript 运行环境

V8 引擎是一款专门解释和执行 JS 代码的虚拟机,任何程序只要集成了 V8 引擎都可以执行 JS

NodeJS 不是一门编程语言,NodeJS 是一个运行环境 ,由于这个运行环境集成了 V8 引擎,所以在这个运行环境下可以运行我们编写的JS代码。

这个运行环境最大的特点就是提供了操作 " 操作系统底层的API " ,通过这些底层 API 我们可以编写出网页中无法实现的功能 ( 诸如: 打包工具, 网站服务器等 )

Node 环境搭建

搭建方式一

官网下载.msi安装包: https://nodejs.org/zh-cn/

全程下一步

在命令行工具中输入 node -v

搭建方式二

官网下载.zip安装包: https://nodejs.org/zh-cn/

解压下载好的安装包

在"高级系统设置"中手动配置环境变量 4.在命令行工具中输入 node -v

搭建方式三

下载NVM: https://github.com/coreybutler/nvm-windows

在 D 盘创建 dev 目录

在 Dev 目录中创建两个子目录 nvm 和 nodejs , 并且把 nvm 包解压进去 nvm 目录中

在 install.cmd 文件上面右键选择【以管理员身份运行】 - 在终端中直接按下回车 - 将弹出的文件另存为到 NVM 目录

打开 settings.txt 文件点击修改

root: D:\Developer\Dev\NVM

path: D:\Developer\Dev\Node

6. 配置环境变量

NVM_HOME: D:\xxx\Dev\NVM

NVM_SYMLINK: D:\xxx\Dev\Node

在Path中添加 %NVM_HOME% %NVM_SYMLINK%

7. 在命令行工具中输入 nvm version

NVM常用命令

nvm list 查看当前安装的 Node.js 所有版本

nvm install 版本号 安装指定版本的 Node.js

nvm uninstall 版本号 卸载指定版本的 Node.js

nvm use 版本号 选择指定版本的 Node.js

Node 环境和浏览器环境的区别

NodeJS环境和浏览器环境一样都是一个JS的运行环境, 都可以执行JS代码. 但是由于宿主不同所以特点也有所不同

1. 内置对象不同

浏览器环境中提供了 window 全局对象

NodeJS 环境中的全局对象不叫 window , 叫 global

2. this 默认指向不同

浏览器环境中全局this默认指向 window

NodeJS 环境中全局this默认指向空对象 {}

3. API 不同

浏览器环境中提供了操作节点的 DOM 相关 API 和操作浏览器的 BOM 相关 API

NodeJS 环境中没有 HTML 节点也没有浏览器, 所以 NodeJS 环境中没有 DOM / BOM

Node 全局对象的属性与模块导出\入数据

Node 全局对象的属性

和浏览器一样 Node 环境中的全局对象也提供了很多方法属性供我们使用 中文文档地址: http://nodejs.cn/api/

__dirname: 当前文件所在文件夹的绝对路径

__filename: 当前文件的绝对路径

setInterval / clearInterval : 和浏览器中window对象上的定时器一样

setTimeout /  clearTimeout : 和浏览器中window对象上的定时器一样

console :  和浏览器中window对象上的打印函数一样

Node 中的模块导出数据

在 NodeJS 中想要导出模块中的变量函数有三种方式

这个在我们 JS 逆向的时候经常使用到,只要将加密的 JS 补全并将返回的变量导出出来就可以在其他的 JS 中 require 模块后直接使用了。

通过exports.xxx = xxx导出

通过module.exports.xxx = xxx导出

通过global.xxx = xxx导出

注意:不管使用那种方法导出,在使用的时候需要 require 模块后才能使用,通过global.xxx 方式导出不符合 CommonJS 规范, 不推荐使用

Node 中的模块导入的注意事项

1、require 导入模块时可以不添加导入模块的类型

如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件无论是三种类型中的哪一种, 导入之后都会转换成 JS 对象返回给我们

2、导入自定义模块时必须指定路径

require 可以导入自定义模块(文件模块)、系统模块(核心模块)、第三方模块

导入

自定义模块模块时前面必须加上路径(这就是为什么很多新手导入自己写的模块时出错的原因)

导入

系统模块和

第三方模块是不用添加路径

3、导入系统模块和第三方模块是不用添加路径的原因

如果是

系统模块直接到环境变量配置的路径中查找

如果是

第三方模块会按照

module.paths 数组中的路径依次查找