前言
Node.js 是跨平台、开源的 JavaScript 运行环境,可在 Windows、Linux、macOS 等操作系统上运行。Node.js 由 OpenJS Foundation (原为 Node.js Foundation,已与 JS Foundation 合并)持有和维护,亦为 Linux 基金会的项目。Node.js 采用 Google 开发的 V8 执行代码,使用事件驱动和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。(维基百科)
解释器
交互式终端
运行源码
<file>.js:需要运行的JS文件
通用JS代码
传送门
全局变量
控制台对象
控制台输出
清空控制台
输出函数调用栈
进程对象
获取命令行参数
1
| var resultList = process.argv;
|
执行函数
定时器
1
| setTimeout(() => {}, 1000);
|
计时器
1
| setInterval(() => {}, 1000);
|
立即执行
下一次Tick执行
1
| process.nextTick(() => {});
|
Nodejs的模块
- Nodejs中每个JS文件就是一个模块,每个模块的
module对象指向这个模块
- Nodejs的模块化是通过CommonJS规范实现的,通过
module.exports导出,通过require()导入
- Nodejs中默认
module.exports的指向与exports的指向是同一个空对象,但最终导出模块是由module.exports决定的
- 所以虽然在
module.exports的指向与exports的指向均未改变之前,用哪一个都可以,但如果module.exports的指向或exports的指向改变了之后,实际上是以module.exports的指向为准
- 在使用
require()进行导入模块操作时,会自动执行一次模块中的所有代码,然后会将模块进行缓存,如果之后又导入了这个模块,则直接从缓存中获取模块,不再执行模块中的代码
定义模块
demo.js1 2 3 4 5 6 7 8 9 10
| const obj = {};
const fn = function () { ... }
module.exports = { obj: obj, fn: fn, };
|
引入模块
main.js1 2 3 4 5
| const demo = require("./demo.js");
console.log(demo.obj);
demo.fn();
|
引入模块时的查找规则
1
| const xxx = require("xxx");
|
- 判断是否包含路径
- 如果只是字符串
- 匹配名称为
xxx的内置模块
- 匹配路径为
node_modules/xxx/index.js的文件
- 匹配上层路径
../node_modules/xxx/index.js的文件,以此类推
- 找不到最终报错
- 如果包含路径,如以
./或../开头
- 匹配文件名为
xxx的文件
- 匹配文件名为
xxx.js的文件
- 匹配文件名为
xxx.json的文件
- 匹配文件名为
xxx.node的文件
- 匹配路径为
xxx/*.js的文件
- 匹配路径为
xxx/*.json的文件
- 匹配路径为
xxx/*.node的文件
- 找不到最终报错
Nodejs的包
- Nodejs中封装了一个或多个模块的目录,被称为包,目录名即为包名
- 包的根目录下必须有一个
package.json的文件
- 包名不能包含中文或空格,否则在创建package.json文件时会报错
Nodejs的内置模块 - http模块
完成
参考文献
哔哩哔哩——黑马程序员
哔哩哔哩——前端开发专业教程