一、__dirname
__dirname 表示当前模块所在的目录名称。在实际开发中,当我们需要处理与当前文件所在目录相关的路径操作时,这个全局对象就会发挥重要作用。例如,我们想要读取当前目录下的某个文件,就可以借助 __dirname 来构建准确的文件路径,避免因相对路径问题导致的文件读取失败。
示例代码如下:
console.log(__dirname);
假设我们的代码文件位于 /Users/yourusername/Projects/nodejs - learning 目录下,运行上述代码后,控制台将会输出 /Users/yourusername/Projects/nodejs - learning 。这就为我们在后续操作中基于当前目录进行文件或目录处理提供了准确的路径基础。
二、__filename
__filename 代表当前模块的文件名,包括完整的路径信息。通过它,我们能够确切知晓当前正在执行的脚本文件的具体位置和名称。这在一些需要获取当前执行文件相关信息的场景中非常有用,比如记录日志时,我们可能需要记录是哪个文件产生的日志信息,__filename 就能派上用场。
示例代码如下:
console.log(__filename);
同样假设代码文件位于 /Users/yourusername/Projects/nodejs - learning/index.js ,运行该代码后,控制台会输出 /Users/yourusername/Projects/nodejs - learning/index.js ,完整地展示了当前模块的文件名及路径。
三、process 对象
process 对象是 Node.js 中一个非常强大且常用的全局对象,它提供了关于当前 Node.js 进程的大量信息和操作方法。
- process.env:用于访问环境变量。环境变量在不同的运行环境中可以配置不同的值,这使得我们的应用程序能够根据不同的环境进行灵活的配置。比如,我们可以在开发环境和生产环境中设置不同的数据库连接字符串,通过 process.env 来获取相应的环境变量值,从而实现应用在不同环境下连接到正确的数据库。
示例代码如下:
// 假设我们在环境变量中设置了一个名为API_KEY的变量
console.log(process.env.API_KEY);
在实际使用中,我们需要根据具体的运行环境(如通过命令行设置环境变量或者在服务器的配置文件中设置)来确保 API_KEY 被正确赋值,这样应用程序才能根据这个环境变量进行相应的操作,比如访问需要认证的 API 服务。
- process.argv:这个属性用于获取命令行参数。当我们在命令行中执行 Node.js 脚本时,可以附带一些参数,通过 process.argv 就能够在脚本中获取这些参数,进而根据不同的参数执行不同的逻辑。
示例代码如下:
console.log(process.argv);
假如我们在命令行中执行 node index.js arg1 arg2 ,那么运行上述代码后,控制台会输出一个数组 [ 'node', '/Users/yourusername/Projects/nodejs - learning/index.js', 'arg1', 'arg2' ] 。其中,数组的前两个元素分别是 Node.js 的执行路径和当前脚本文件的路径,从第三个元素开始就是我们在命令行中传入的参数。我们可以利用这些参数来实现一些灵活的功能,比如根据不同的参数执行不同的数据库查询操作。
- process.exit() :该方法用于退出当前进程。在某些特定情况下,比如我们检测到程序出现了严重错误,无法继续正常运行,或者完成了所有预定任务后需要干净地退出程序,就可以使用 process.exit() 方法。
示例代码如下:
// 假设在某个条件下,我们需要退出程序
if (someErrorCondition) {
console.log('出现严重错误,程序退出');
process.exit(1); // 1 表示异常退出,0 表示正常退出
}
通过传递不同的退出码(0 表示正常退出,非 0 表示异常退出),我们可以在程序外部(比如在脚本被调用的上层环境中)根据这个退出码来判断程序的执行状态,进而采取相应的后续操作。
- process.cwd() :返回当前的工作目录。工作目录是指在命令行中启动 Node.js 进程时所在的目录。这个属性在涉及文件操作时非常重要,因为许多文件操作方法默认会基于当前工作目录进行路径解析。
示例代码如下:
console.log(process.cwd());
如果我们在 /Users/yourusername 目录下通过命令行执行 node /Users/yourusername/Projects/nodejs - learning/index.js ,那么运行上述代码后,控制台将输出 /Users/yourusername ,这就是当前的工作目录。明确当前工作目录有助于我们在进行文件读取、写入等操作时,准确地构建相对路径,避免因路径错误导致的文件操作失败。
- process.memoryUsage() :用于获取当前 Node.js 进程的内存使用情况。在开发大型应用程序或者对性能要求较高的应用时,了解程序的内存使用情况非常关键,我们可以通过这个方法来监测内存的使用量,判断是否存在内存泄漏等问题。
示例代码如下:
const memoryUsage = process.memoryUsage();
console.log(`堆内存使用量:${memoryUsage.heapUsed} 字节`);
console.log(`堆内存总大小:${memoryUsage.heapTotal} 字节`);
console.log(`rss(常驻集大小):${memoryUsage.rss} 字节`);
运行上述代码后,控制台会输出当前进程的堆内存使用量、堆内存总大小以及常驻集大小等信息。通过对这些数据的分析,我们可以及时调整程序的算法或数据结构,优化内存使用,提高程序的性能和稳定性。
通过今天对这些 Node.js 全局对象的学习,你已经为后续更复杂的 Node.js 开发打下了坚实的基础。在实际编程中,要灵活运用这些全局对象,它们将为你的开发工作带来极大的便利。