Node环境中的全局变量-module/exports

624 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

在Node环境中,全局变量可以在任意一个地方去使用,无论我们开发命令行应用还是web应用都能使用这些全局变量。比如console.log和__dirname等等。

今天我们来看一些Node中常用的全局对象和方法,让我进一步去理解Node,以及它和其他的JavaScript运行时的区别,比如浏览器。

在浏览器中我们常用的全局对象或方法有:

  • window
  • alert()
  • console
  • setTimeOut()
  • setInterval()

同样在Node中也有一些重要的方法,除了ECMAScript提供的功能,Node也提供了一些重要的功能。

其中一个重要的对象就是process,它可以用来和操作系统之间通信。

另还有module模块,它是Node模块化编程的基石。

模块化是一个重要的功能,只有能够拆分模块,才能更好的组织大型客威化的应用,或者将模块发布给其他人,进行更好的复用。

无论我们使用Node提供的核心模块,还是安装npm上的第三方模块,都需要了解Node中的模块的基本概念。

使用npm安装第三方模块

比如我们安装express模块

npm install express

使用express模块

const express = require('express')

console.log(typeof express)
// function

创建自己的模块

除了第三方模块,我们经常在项目中封装自己的模块

Node的module提供了将代码拆分成多个文件的解决方案。和C语言的include不同,与Ruby和Python的require也不同。Node中的require返回一个对象,而不是像C语言中的预处理器那样把代码加载到当前的命名空间。

Node的这套模块系统,基于CommonJS规范标准:wiki.commonjs.org/wiki/Module…

我们通过exposts对象来导出变量或者方法

比如创建一个user.js

const getName = () => {
  return '小帅';
};

exports.getName = getName;

然后在index.js

const user = require('./user');
console.log(`User: ${user.getName()}`);

// User: 小帅

我们通过module.exports来进行默认的导出

同样假如user.js如下:

class User {
  constructor(name, age, email) {
    this.name = name;
    this.age = age;
    this.email = email;
  }

  getUserStats() {
    return `
      Name: ${this.name}
      Age: ${this.age}
      Email: ${this.email}
    `;
  }
}

module.exports = User;

index.js如下

const User = require('./user');
const shuai = new User('小帅', 23, 'shuai@qq.com');

console.log(jim.getUserStats());

// 输出:
// Name: 小帅
// Age: 23
// Email: shuai@qq.com

根据导出的内容不同,可以选择使用exports或者module.exports来使用。

下篇文章我将详细对比他们之间有何不同,和区别。

欢迎我的公众号【小帅的编程笔记】,让自己和他人都能有所收获!