nodejs是什么?
nodejs它不是框架也不是语言,它是一个跨平台的JavaScript运行时环境;(参考浏览器也是一个运行环境)
模块系统
nodejs可使用
CJS(CommonJS)和ESM(ECMAScript Modules)两种模块系统规范书写
- CJS规范
使用require和module.exports实现导入和导出; (module.exports和exports)都可以导出模块,两者的区别是exports是module.exports的快捷引用
- ESM规范
导入导出分别使用import和export;nodejs默认情况采用的是CJS规范,在node中想使用ESM规范的方式有:
- 使用.mjs作为文件后缀名;(如a.mjs)
- package.json中设置type为module
- 两者规范的区别
- 模块加载时机:
CJS支持动态加载模块 (require语句可以出现在任意位置),ESM会在所有模块都加载完毕后才执行代码 (通常会将 import 导入语句放在模块的顶部); - 导出内容区别:
ESM导入的是值的引用,而CJS导入的是值的拷贝;
部分内置模块
- 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进行数据写入等...
- 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')//写入
- path路径
- path.join();将多个路径拼接成一个相对路径 (或绝对路径,取决于第一个路径是否为根路径)。
- path.resolve();将多个路径拼接成一个绝对路径,返回一个解析后的绝对路径。即如果传入相对路径,会以当前工作目录为基准,计算出绝对路径,如果传入了绝对路径,则以传入的绝对路径为基准。