全局对象

  • 与浏览器平台的window不完全相同
  • Nodejs全局对象上挂载许多属性
  • 全局对象是JavaScript中的特殊对象
  • Nodejs的全局对象是global(直接访问,不需要定义)
  • Global的根本作用就是作为宿主,全局对象可以看做是全局变量的宿主
  1. __filename: 返回正在执行脚本文件的绝对路径
  2. __dirname: 返回正在执行脚本所在目录(不包含文件)
  3. timer类函数:执行顺序与事件循环间的关系
  4. process:提供与当前进程互动的接口
  5. require:实现模块的加载
  6. 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’)); // 获取这个文件的完整路径

  1. <a name="oSLp1"></a>
  2. #### process
  3. 1. 获取当前执行脚本的一些信息,例如:进程在工作的时候对CPU和进程产生一些消耗,利用process提供的一些属性或者方法,可以得到这样一些数据
  4. 1. 当前进程在工作的时候,本地是什么环境,也可以通过process获取
  5. 1. 通过process可以对当前的进程执行一些操作,比如:监听进程执行的时候内置的一些事件,也可以创建一些子进程,让两个进程之间通信,从而完成更多的操作
  6. <a name="ZluTq"></a>
  7. ##### 资源-运行环境
  8. ```javascript
  9. // 1.资源 :CPU 内存
  10. // console.log(process.memoryUsage());
  11. /*
  12. {
  13. rss: 20025344, 常驻内存
  14. heapTotal: 4468736, 总的内存大小
  15. heapUsed: 2613288, 使用的内存大小
  16. external: 855863, 存储表示底层C,C++模块
  17. arrayBuffers: 9898 新版本新加的,代表独立的空间大小,不占用V8内存
  18. }
  19. */
  20. // const fs = require('fs')
  21. // console.log(process);
  22. console.log(process.cpuUsage()); // 表示用户在执行的过程中所占用的CPU,和操作系统所占用的CPU
  23. // { user: 15000, system: 15000 }
  24. // 2. 运行环境 运行目录 node环境, CPU架构 用户环境 系统平台
  25. // console.log(process.cwd()); // 当前项目运行目录
  26. // console.log(process.version); // node版本
  27. // console.log(process.versions); // 各种信息的版本 node v8
  28. // console.log(process.arch);// 电脑版本 x64
  29. // console.log(process.env.NODE_ENV); // 判断是开发环境还是生产环境 ,,webpack 会配置,项目中直接调用就OK了
  30. // console.log(process.env.PATH); // 环境变量
  31. // console.log(process.env.USERPOFILE); // undefinder 系统平台,如果是Mac平台,需要使用 HOME
  32. // 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)
    }
})