node.js的exports、module.exports与ES6的export、export default深入详解

node.js的exports、module.exports与ES6的export、export default深入详解

简介

在 Node.js 中,我们可以通过模块系统(Module System)来定义和使用模块。模块可以是一个文件或用 npm 安装的一个包。在模块中,我们可以导出(Export)一些变量、函数或类,供其他模块使用。

在 Node.js 中,有两个类似但不同的模块导出机制:exports 和 module.exports。而在 ES6 中,则有 export 和 export default。

exports 和 module.exports

exports 和 module.exports 都可以把对象暴露给其他模块。但是,它们之间有什么区别呢?

让我们看下面这个示例:

// lib.js
exports.foo = function () {
  console.log('hello, world!');
};

// app.js
const lib = require('./lib');
lib.foo();

在这个示例中,我们使用了 exports 来导出一个名为 foo 的函数,然后在 app.js 中使用 require('./lib') 来引入这个模块,并调用了 foo 函数。这个示例是可以正常工作的。

实际上,Node.js 内部对 exports 和 module.exports 的处理机制是这样的:

exports = module.exports = {};

也就是说,exports 和 module.exports 实际上是指向同一个对象的引用。因此,我们可以使用 exports.xx 和 module.exports.xx 这两种方式来向外暴露变量、函数或类。

但是,如果我们将 exports 直接赋值为一个新的对象,例如:

// lib.js
exports = {
  foo: function () {
    console.log('hello, world!');
  }
};

// app.js
const lib = require('./lib');
lib.foo();

这个示例是不会工作的。原因是 exports 的指向被改变了,而 module.exports 并没有受到影响。

因此,如果我们想在 Node.js 中使用 exports 暴露变量、函数或类,就需要像这样使用:

// lib.js
exports.foo = function () {
  console.log('hello, world!');
};

// app.js
const lib = require('./lib');
lib.foo();

或者使用如下方式:

// lib.js
module.exports = {
  foo: function () {
    console.log('hello, world!');
  }
};

// app.js
const lib = require('./lib');
lib.foo();

export 和 export default

在 ES6 中,可以使用 export 和 export default 来向外暴露变量、函数或类。

这两者的区别在于,export 可以暴露多个变量、函数或类,而 export default 只能暴露一个默认变量、函数或类。因此,使用 export 和 export default 的时候,需要注意一下它们的用法。

使用 export 默认导出的变量、函数或类,可以用 import 导入并且可以使用任意名称来指代它们。示例代码如下:

// lib.js
export default function () {
  console.log('hello, world!');
}

// app.js
import foo from './lib';
foo();

在这个示例中,我们使用 export default 导出了一个函数,并在 app.js 中使用 import xxx from './lib' 来导入这个函数。

如果我们想使用 export 导出多个变量、函数或类,可以使用如下方式:

// lib.js
export function foo () {
  console.log('foo');
}

export function bar () {
  console.log('bar');
}

// app.js
import { foo, bar } from './lib';
foo();
bar();

在这个示例中,我们使用 export 导出了两个函数,并在 app.js 中使用 import { xxx, xxx } from './lib' 来导入这两个函数。

总结

Node.js 的 exports 和 module.exports 可以用来向外暴露变量、函数或类,而 export 和 export default 则是 ES6 中用来向外暴露变量、函数或类的关键字。

需要注意的是,在 Node.js 中,exports 和 module.exports 的区别在于它们内部处理机制的差异。如果想暴露多个变量、函数或类,建议使用 exports;如果想暴露一个默认变量、函数或类,建议使用 export default。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js的exports、module.exports与ES6的export、export default深入详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js实战 建立简单的Web服务器

    Node.js实战建立简单的Web服务器攻略 第一步:安装Node.js 安装Node.js,可以从官方网站下载安装包,也可以使用包管理器安装。 第二步:编写服务器脚本 使用任何文本编辑器(如Notepad或Sublime Text)编写以下JavaScript脚本,将其保存为server.js文件: const http = require(‘http’)…

    node js 2023年6月8日
    00
  • 浅谈node中的cluster集群

    浅谈node中的cluster集群 Node.js中的cluster模块可以帮助我们建立一个多进程的服务器应用,有效地利用多核的CPU资源,提升Node.js的性能以及可靠性。在这篇文章中,我们将会详细讨论如何使用cluster模块来建立一个集群服务器,并且给出两个示例。 Cluster模块概述 cluster模块是Node.js内置的模块之一,它提供了一个…

    node js 2023年6月8日
    00
  • express框架通过ejs模板渲染输出页面实例分析

    我会为你详细讲解“express框架通过ejs模板渲染输出页面实例分析”的完整攻略。该攻略的过程将介绍express框架如何使用ejs模板引擎来渲染页面模板并输出页面。 环境准备 在开始攻略之前,我们需要准备好以下环境: Node.js环境(建议使用最新版) npm包管理器(通常与Node.js环境一起安装) 一个文本编辑器(如:VS Code) 安装和配置…

    node js 2023年6月8日
    00
  • 基于node.js的fs核心模块读写文件操作(实例讲解)

    基于node.js的fs核心模块读写文件操作是node.js开发者最常用的功能之一,下面我将为你详细讲解下这个核心模块的使用方法。具体内容如下: 1. fs核心模块的基本介绍 fs是node.js提供的文件系统模块,它提供了大量的文件操作API和功能。这个模块可以帮助开发者读取、写入、更改、删除文件,以及查询文件状态等。其中最常用的几个API包括: fs.r…

    node js 2023年6月8日
    00
  • 一文带你了解前端包管理工具npm、yarn和pnpm

    一文带你了解前端包管理工具npm、yarn和pnpm 前言 前端包管理工具是前端开发中必不可少的工具之一,它可以帮助我们快速便捷地安装、升级、管理前端项目中的各种依赖包。本文主要介绍三种最常用的前端包管理工具npm、yarn和pnpm。 npm npm全称为Node Package Manager,是由Node.js官方提供的包管理工具。npm的特点为: 可…

    node js 2023年6月8日
    00
  • 前端AI机器学习在浏览器中训练模型

    要在浏览器中进行前端AI机器学习的模型训练,可以通过TensorFlow.js这个JavaScript库来实现。下面是完整攻略: 第一步:准备数据集 在训练模型之前,首先需要准备好数据集,这通常是一个带有标签的数据集。可以利用已有的公共数据集(比如MNIST手写数字数据集),也可以自己收集数据。 第二步:加载数据集 需要将数据集加载到浏览器中,可以使用浏览器…

    node js 2023年6月8日
    00
  • TypeScript实现数组和树的相互转换

    类型脚本(TypeScript)是JavaScript的一个超集,它增加了可选的静态类型和其他语言特性,使得编写和维护大型JavaScript应用更加容易。可以使用TypeScript实现数组和树之间的相互转换,本文将提供一种详细的操作攻略。 步骤一:创建类型定义和数据结构 在TypeScript中,我们可以使用类型定义来定义数据结构。在本例中,我们将使用类…

    node js 2023年6月8日
    00
  • 在Ubuntu系统上安装Node.JS的教程

    安装 Node.JS 需要以下步骤: 步骤一:添加 Node.js PPA(Private Package Archive)个人软件包存档 Ubuntu 自带的软件源可能不总是最新的。因此,我们可以添加一个 PPA 来获取最新稳定的 Node.js 软件包。 打开终端,运行以下命令以添加 Node.js PPA: curl -sL https://deb.n…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部