module.exports和exports、export和export default、require和import的详解

2023-05-16

一、分类

commonJS:导出(module.exports和exports)、导入(require)。
ES6:导出(export和export default)、导入(import)。

二、module.exports和exports的区别与联系

module.exports属性表示当前模块对外输出的接口,其他模块加载该模块,实际就是读取module.exports变量。写法:

let aa = () => {
  console.log('aa');
}
let bb = () => {
  console.log('bb');
}
let cc = () => {
  console.log('cc');
}

module.exports.aa = aa;
module.exports = {
  bb: bb,
  cc: cc
}

exports是module.exports的一个引用,指向module.exports,也就是说使用者最终调用的是module.exports,而不是exports。写法:

let aa = () => {
  console.log('aa');
}
let bb = () => {
  console.log('bb');
}

exports.aa = aa;
exports.bb = bb;

提示:
(1)直接给exports赋值并不会改变module.exports的值,因此不能直接给exports赋值。
(2)使用exports时,要确保module.exports为空,也就是说不具备任何属性及方法,否则exports不生效。

<!-- a.js -->
let aa = 'aa'

exports = {
  aa: aa
}

<!-- b.js -->
let util = require('./a.js');
console.log(util); // util的值为{}
<!-- a.js -->
let aa = 'aa'
let bb = 'bb'

module.exports = {
  aa: aa
}
exports.bb = bb;

<!-- b.js -->
let util = require('./a.js');
console.log(util); // {aa: 'aa'}

三、export和export default的区别与联系

export用于规定模块的对外接口,一个文件中可写多个。写法:

let aa = 'aa';
let bb = 'bb';

export let cc = 'cc'; //第一种写法
export function sum(x, y) { //第二种写法
  return x + y;
}
export {aa, bb} //第三种写法

export default也用于规定模块的对外接口,一个文件只能写一个。写法:

let aa = 'aa';
let bb = 'bb';

export default aa; //第一种写法
export default function sum(x, y) { //第二种写法
  return x + y;
}
export default {aa, bb} //第三种写法

提示:
(1)在同一个文件中,export可以有多个,export default只能有一个。
(2)使用export导出时,应使用{}分别导入;使用export default导出时,应使用一个变量整体导入。

/******export******/
export {aa, bb, cc};//util.js
import {aa, bb, cc} from 'util.js'

/******export default******/
export default {aa, bb, cc};//util.js
import util from 'util.js'
// util.aa、util.bb、util.cc

四、require和import的区别

  1. require和import都是用来导入模块。
  2. require属于commonJS语法,import属于ES6语法。
let aa == require('util.js');
import bb from 'util.js';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

module.exports和exports、export和export default、require和import的详解 的相关文章

  • perl `require` 对于变量给定的文件

    我想使用一个模块 文件的路径将位于变量中 我尝试使用这段代码 usr bin perl w use strict use Getopt Long my library zipped aid class file GetOptions aid
  • 如何以编程方式从设置中设置默认启动器?

    我想将我的启动器设置为默认启动器 我的代码对很多人来说都可以正常工作 但在乐视设备上却无法正常工作 因为它提供了从默认应用程序设置中设置默认启动器的功能 运行此代码时 它会在默认启动器上移动 但仅在乐视设备中不显示启动器选择器弹出窗口 如何
  • 为什么 DefaultStyleKey 不更改我的子类的默认样式?

    我有一个基类叫做Handle我从中派生出几个基类 例如RectHandle and EllipseHandle 在这些子类中 我尝试覆盖默认样式键以指向Handle但风格定位Handle不适用 我仍然需要明确目标RectHandle or
  • 扩展无法启用或安装的问题

    php 7 3 5 你好 我的扩展 ext http 有问题 composer 说我缺少 ext http 即使我在composer json 中写了这个 为什么 这就是这个确切的消息 问题1 您的系统中缺少请求的 PHP 扩展 ext h
  • TypeScript 扩展模块中的对象

    我想做的事情确实类似于this https stackoverflow com questions 12802383 extending array in typescript and this https stackoverflow co
  • 如何覆盖 app/code/core/Mage/Core/functions.php 中的 Magento 函数

    我需要重写此文件中的一个函数 应用程序 代码 核心 Mage Core functions php 问题是 它是如此核心 以至于没有与之关联的类 可能是因为 Core 甚至不是一个模块 有谁知道如何在没有类的情况下覆盖文件中的函数 任何帮助
  • Python 上的 io.open() 和 os.open() 有什么区别?

    我意识到open 我一直在使用的函数是一个别名io open 以及导入 from os会掩盖这一点 通过以下方式打开文件有什么区别io模块和os module io open 是文件 I O 的首选高级接口 它将操作系统级文件描述符包装在一
  • 如何在 Linux 上使用 Python 导出

    我需要在 Python 中进行这样的导出 export MY DATA my export 我尝试过这样做 python mode coding utf 8 import os os system export MY DATA my exp
  • 强制 telnet 客户端进入字符模式

    我有一个应用程序 我接受来自 telnet 客户端的套接字连接 并建立一个简单的键盘驱动的字符 GUI telnet 客户端 至少在 Linux 上 默认为一次一行模式 所以我总是必须这样做 mode char手动 浏览相关 RFC 表明
  • 如何在 Perl 脚本中递归查找文件/文件夹?

    我有一个 perl 脚本 我编写了该脚本来递归地搜索 Windows 文件夹中的文件 我输入搜索文本作为 perl 脚本运行时参数 以查找名称中包含此文本的文件 perl脚本如下 use Cwd file1 ARGV 0 res1 glob
  • OCaml:为什么重命名类型会失败并显示“它们的种类不同”

    我正在为成对的类型见证和见证类型的值构建一个通用容器 我想将其用于几种不同的类型 这会给我带来错误 因为这些类型的名称都相同 所以我尝试重命名函子结果中的类型 如下所示 module type Witness sig type a key
  • Python - randrange() 的空范围 (0,0, 0) 和 ValueError("randrange() 的空范围 (%d,%d, %d)" % (istart, istop, width))

    当我运行这个程序时 python 3 3 1 import random import time from random import randrange print print I am thinking of a person time
  • VBA:新集合 -> 模块不是有效类型

    我尝试使用集合作为函数的一部分 但是在编译时不断收到错误 模块不是有效类型 即使该函数只是定义一个集合 我也会得到相同的结果 Function CountUniqueTags Dim table As Collection Set tabl
  • Webpack 5 - 资产模块 - 缺少 url-loader 功能 - postTransformPublicPath

    我想按照建议切换到 webpack 5 asset 模块 不幸的是我错过了 webpack url loader 的函数 postTransformPublicPath path any gt any 由于我们应用程序的结构 资产的公共区域
  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • 使用多个模块时优化 Flex

    我有一个 Flex 应用程序 加载时间非常重要 消费者网站 我希望能够在屏幕上显示一些内容 然后允许根据需要加载其他模块 我面临的问题是所有模块的总和比我将所有组件包含在单个 swf 文件中要大得多 原因很明显 例如 访问 Web 服务所需
  • 如何在 Mac 上安装 Beautiful Soup 模块?

    我读了这篇文章但没有找到解决方案 http docs python org install index html http docs python org install index html 正常 的方法是 访问美丽汤网站 http ww
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中

随机推荐