爬虫工程师也应该会的 NodeJS 知识(一)
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
数组中的路径依次查找