全局对象
- 与浏览器平台的window不完全相同
- Nodejs全局对象上挂载许多属性
- 全局对象是JavaScript中的特殊对象
- Nodejs的全局对象是global(直接访问,不需要定义)
- Global的根本作用就是作为宿主,全局对象可以看做是全局变量的宿主
- __filename: 返回正在执行脚本文件的绝对路径
- __dirname: 返回正在执行脚本所在目录(不包含文件)
- timer类函数:执行顺序与事件循环间的关系
- process:提供与当前进程互动的接口
- require:实现模块的加载
- module、exports:处理模块的导出
- 默认情况下 this是空对象
- 使用自执行函数包裹一层后,发现this和global相同(和nodejs模块化实现方式有关)
- 每一个模块执行的时候,都被包裹在自执行函数中,会帮助我们自动引入一些方法 ```javascript console.log(this) // {} console.log(this == global) // false (function(){ console.log(this == global) // true })()
/* path 模块常用api
basename() 获取路径中基础名称 返回最后一个路径名称 dirname() 获取路径中目录名称 返回路径中最后一个的上层目录 extname()获取路径中扩展路径 返回path路径中相应的文件后缀名,返回路径中最后一个.到结尾的内容 isAbsolute() 获取路径是否为绝对路径 join()拼接多个路径片段
resolve() 返回绝对路径 resolve([from],to) parse() 解析路径 接收一个路径,返回一个对象,包含不同的信息 root dir base format() 解析路径 normalize() 规范化路径 */ const path = require(‘path’)// E:\测试项目\test\Node\05-path.js
// console.log(__filename);
// 1.获取路径中的基础名称 console.log(path.basename(__filename, ‘.css’)); // 05-path.js,第二个参数,可以去除后缀名 console.log(path.basename(‘/a/b/c’)); // 返回最后一个路径名称,如果结尾有目录分割符号,会自动解析
//2.目录路径 console.log(path.dirname(__filename)); // 获取的是当前目录的路径 console.log(path.dirname(‘/a/a/c/s’));
// 3.获取扩展名 console.log(path.extname(‘/a/v/s/q.css’));// css 会匹配最后一个.结束的位置
// 4.解析路径 const obj = path.parse(‘./a/v/sw/‘) console.log(obj);
// 5.序列化路径 const parse = path.parse(‘./a/b/c’) console.log(path.format(parse));
// 6. 判断是否为绝对路径 console.log(path.isAbsolute(‘/qq/q’));
// 7.拼接路径 console.log(path.join(‘a/b’,’c’,’index.html’));
// 8.规范化路径 console.log(path.normalize(‘a/b/c/d’)); console.log(path.normalize(‘a\\/b/c/d’)); console.log(path.normalize(‘a/\\b/c/d’)); // b被当做转义字符转义了 console.log(path.normalize(‘a/b//c..//d’));
// 9.绝对路径 console.log(path.resolve()); // 如果什么都不传,相当于把当前工作目录传进去 // console.log(path.resolve(‘/a’,’b’)); console.log(path.resolve(‘05-path.js’)); // 获取这个文件的完整路径
<a name="oSLp1"></a>
#### process
1. 获取当前执行脚本的一些信息,例如:进程在工作的时候对CPU和进程产生一些消耗,利用process提供的一些属性或者方法,可以得到这样一些数据
2. 当前进程在工作的时候,本地是什么环境,也可以通过process获取
3. 通过process可以对当前的进程执行一些操作,比如:监听进程执行的时候内置的一些事件,也可以创建一些子进程,让两个进程之间通信,从而完成更多的操作
<a name="ZluTq"></a>
##### 资源-运行环境
```javascript
// 1.资源 :CPU 内存
// console.log(process.memoryUsage());
/*
{
rss: 20025344, 常驻内存
heapTotal: 4468736, 总的内存大小
heapUsed: 2613288, 使用的内存大小
external: 855863, 存储表示底层C,C++模块
arrayBuffers: 9898 新版本新加的,代表独立的空间大小,不占用V8内存
}
*/
// const fs = require('fs')
// console.log(process);
console.log(process.cpuUsage()); // 表示用户在执行的过程中所占用的CPU,和操作系统所占用的CPU
// { user: 15000, system: 15000 }
// 2. 运行环境 运行目录 node环境, CPU架构 用户环境 系统平台
// console.log(process.cwd()); // 当前项目运行目录
// console.log(process.version); // node版本
// console.log(process.versions); // 各种信息的版本 node v8
// console.log(process.arch);// 电脑版本 x64
// console.log(process.env.NODE_ENV); // 判断是开发环境还是生产环境 ,,webpack 会配置,项目中直接调用就OK了
// console.log(process.env.PATH); // 环境变量
// console.log(process.env.USERPOFILE); // undefinder 系统平台,如果是Mac平台,需要使用 HOME
// console.log(process.platform); // win32 区分系统平台
运行状态
// 运行状态:启动参数、PID、运行时间
// console.log(process.argv);
//[ 'D:\\nodejs\\node.exe', 'E:\\测试项目\\test\\Node\\04-process.js' ]
// process.argv是一个数组,第一个值是node启动程序的路径,第二个值是当前项目路径
// console.log(process.argv0);// execArgv D:\nodejs\node.exe 快捷操作,可以直接拿到argv数组中第一个值
// console.log(process.pid); // ppid 执行完之后就会销毁,想看使用延时器,延迟一会进行查看
// setTimeout(() => {
// console.log(process.uptime()); // 可以用来记录时间
// }, 5000)
process事件监听
// process事件监听
// 里面支持同步代码,不支持异步代码
// 退出之前
// process.on('beforeExit', (code) => {
// console.log('beforeExit:' + code);
// })
// 退出的时间点
// process.on('exit', (code) => {
// console.log('exit:' + code);
// })
// process.exit(); // 程序主动退出
// console.log('代码执行完了');
标准的输入输出,错误,流和管道操作
// 标准的 输入,输出,错误 看一下流和管道的操作
// const fs = require('fs')
// console.log = function(data){
// // 流
// process.stdout.write('--'+data+'\n')
// }
// 标准输出 读取test.txt文件,通过管道把东西拿出来,通过pipe交给标准输出
// fs.createReadStream('test.txt').pipe(process.stdout)
// console.log("杰哥");
// 标准输入,通过管道流给输出,在命令行内,相当于复制
// stdin会拿到,拿到之后会通过管道流出去,交给了stdout
// process.stdin.pipe(process.stdout)
// 设置字符编码集
process.stdin.setEncoding('utf-8')
// 监听一个是否可读的事件,读标准输入的东西
process.stdin.on('readable',() => {
// 从写入的东西读取内容, 有东西就取出来
let chunk = process.stdin.read()
if(chunk!==null){
// 输出
process.stdout.write('data+'+chunk)
}
})