【笔记】Nodejs学习笔记

前言

Node.js is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.(官网

在Nodejs环境中运行JS代码

<file>.js:需要运行的JS文件

1
node <file>.js

通用JS代码

传送门

全局变量

  • global对象是Nodejs运行时的全局对象,在使用global对象中的属性时可以省略global关键字

  • globalThis对象是global对象的别名

  • 模块化开发时的全局变量

    • __dirname:当前js文件所在的目录路径
    • __filename:当前js文件所在的目录路径和文件名
    • exports():对外暴露的变量
    • require():引入模块
    • module():当前模块的实例
  • 其他常用的全局变量

    • process:当前进程的实例
    • console:控制台对象
    • setTimeout():设置定时器函数
    • clearTimeout():清除定时器函数
    • setInterval():设置计时器函数
    • clearInterval():清除计时器函数

控制台对象

控制台输出

1
console.log("");

清空控制台

1
console.clear();

输出函数调用栈

1
console.trace();

进程对象

获取命令行参数

1
var resultList = process.argv;

执行函数

定时器

1
setTimeout(() => {}, 1000);

计时器

1
setInterval(() => {}, 1000);

立即执行

1
setImmediate(() => {});

下一次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.js
1
2
3
4
5
6
7
8
9
10
const obj = {};

const fn = function () {
...
}

module.exports = {
obj: obj,
fn: fn,
};

引入模块

main.js
1
2
3
4
5
const demo = require("./demo.js");

console.log(demo.obj);

demo.fn();

引入模块时的查找规则

1
const xxx = require("xxx");
  • 判断是否包含路径
    • 如果只是字符串
      1. 匹配名称为xxx的内置模块
      2. 匹配路径为node_modules/xxx/index.js的文件
      3. 匹配上层路径../node_modules/xxx/index.js的文件,以此类推
      4. 找不到最终报错
    • 如果包含路径,如以./../开头
      1. 匹配文件名为xxx的文件
      2. 匹配文件名为xxx.js的文件
      3. 匹配文件名为xxx.json的文件
      4. 匹配文件名为xxx.node的文件
      5. 匹配路径为xxx/*.js的文件
      6. 匹配路径为xxx/*.json的文件
      7. 匹配路径为xxx/*.node的文件
      8. 找不到最终报错

Nodejs的包

  • Nodejs中封装了一个或多个模块的目录,被称为包,目录名即为包名
  • 包的根目录下必须有一个package.json的文件
  • 包名不能包含中文或空格,否则在创建package.json文件时会报错

Nodejs的内置模块 - http模块

完成

参考文献

哔哩哔哩——黑马程序员
哔哩哔哩——前端开发专业教程