重学Nodejs-理论基础

61 阅读2分钟

nodejs是什么?

nodejs它不是框架也不是语言,它是一个跨平台的JavaScript运行时环境;(参考浏览器也是一个运行环境)

模块系统

nodejs可使用CJS(CommonJS) 和 ESM(ECMAScript Modules) 两种模块系统规范书写

  1. CJS规范

使用require和module.exports实现导入和导出; (module.exports和exports)都可以导出模块,两者的区别是exports是module.exports的快捷引用

  1. ESM规范

导入导出分别使用import和export;nodejs默认情况采用的是CJS规范,在node中想使用ESM规范的方式有:

  • 使用.mjs作为文件后缀名;(如a.mjs)
  • package.json中设置type为module
  1. 两者规范的区别
  • 模块加载时机:CJS 支持动态加载模块 (require 语句可以出现在任意位置),ESM 会在所有模块都加载完毕后才执行代码 (通常会将 import 导入语句放在模块的顶部);
  • 导出内容区别:ESM 导入的是值的引用,而 CJS 导入的是值的拷贝;

部分内置模块

  1. global全局对象
  • 在nodejs中globalThis===global
  • __filename(正在执行的脚本文件的绝对路径),__dirname(当前执行脚本所在目录的绝对路径)。这 2 个变量,只在 CJS 模块下存在。
  • process.argv 返回一个数组,包含启动 Node.js 进程时传递的命令行参数
  • process.cwd() 获取当前工作目录的绝对路径。
  • process.env 获取当前执行环境的环境变量 (对象形式)。
  • process.exit():终止 Node.js 进程,process.stdout:标准输出流,常用 process.stdout.write 进行数据写入等...
  1. Buffer对象
  • 创建Buffer对象
const a=Buffer.alloc(10);//创建一个大小为10的buffer对象
const b=Buffer.from('this is test.');
  • 内容改变
const b=Buffer.from('this is test.');
b.toString();//转为字符串输出
b.toString('base64')//转为base64输出
b.writer('hello')//写入
  1. path路径
  • path.join();将多个路径拼接成一个相对路径 (或绝对路径,取决于第一个路径是否为根路径)。
  • path.resolve();将多个路径拼接成一个绝对路径,返回一个解析后的绝对路径。即如果传入相对路径,会以当前工作目录为基准,计算出绝对路径,如果传入了绝对路径,则以传入的绝对路径为基准。