module.exports、exports和export、export default的区别,import和require的区别

2023-05-16

在vue及其他模块化开发中,经常会用到这些输出和引用的语句,那么,怎么在合适的时候用合适的语句呢,怎么区分它们呢?

一、理论区别

首先,module.exports和exports是属于 CommonJS 模块规范,export和export default是属于ES6语法。require属于 CommonJS 模块规范,import属于ES6语法。

一般情况:
module.exports和exports导出模块,用require引入模块。
export和export default导出模块,import导入模块。

1.module.exports、exports的区别

  • 对于node执行的每一个js文件,都会自动创建一个module模块对象,如同一个封闭的函数一样,把一个函数封闭起来,外部怎样才能去引用呢?就是要这个模块主动暴露出来一个接口,即exports和module.exports,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {};
  • exports只是module.exports的一个引用,当exports改变的时候,module.exports也会改变,但是当给module.exports赋值的时候,exports不会改变。真正暴露出去的是module.exports对象!(即当给module.exports赋值后,exports所有的赋值均失效)
var func1 = function() {
   console.log("func1");
};
var func2 = function() {
   console.log("func2");
};
module.exports = {
   function1: func1
};
exports.function1 = func1;
exports.function2 = func2;
console.log(exports);
console.log(module.exports); //只有func1函数
  • exports只能点数据,不能等于;module.exports能点能等于
    exports只能使用.语法向外暴露内部变量 例 exports.xxx=xxx
    module.exports既可以通过点语法,也可以直接赋值一个对象 例 module.exports.xxx=xxx
    module.exports=xxx

2.export、export default的区别

export是es6引出的语法,用于导出模块中的变量,对象,函数,类。对应的导入关键字是import。

二者的区别有以下几点:

  • export default在一个模块中只能有一个,当然也可以没有。export在一个模块中可以有多个。
  • export default的对象、变量、函数、类,可以没有名字。export的必须有名字。
  • export default对应的import和export有所区别

3.import、require的区别

import是ES6语法,与export对应。但是很多浏览器还不支持,最终都会Es5 – 浏览器支持的CommonJS语法
require是CommonJS规范

  • require 是赋值过程并且是运行时才执行, import 是解构过程并且是编译时执行。require可以理解为一个全局方法。而import必须写在文件的顶部。

  • require的性能相对于import稍低,因为require是在运行时才引入模块并且还赋值给某个变量,而import只需要依据import中的接口在编译时引入指定模块所以性能稍高

  • import 语法比较灵活,可以导入模块中的所有导出内容或者部分导出内容

二、用法区别

1.四种暴露模块数据的方法

var func1 = function() {
  console.log("func1");
};
var func2 = function() {
   console.log("func2");
};
//1.module.exports
module.exports = {
   function1: func1
};
module.exports.function2 = func2;
//2.exports
exports.function1 = func1;
exports.function2 = func2;
//3.export
export const function1 = function() {
    console.log("func1");
};
export const function2 = function() {
    console.log("func2");
};
//4.export default { //类似 module.exports = {}
  function1: func1,
  function2: func2
}

2.三种获取模块数据的方法

针对module.exports、exports、export三种暴露方式,以下任意一种方法都能获取到

//1.require
var functions = require("./fun.js"); //引入一个包含所有暴露属性的对象
console.log(functions)
functions.function1();
functions.function2();
//2.import
import {function1,function2} from './fun.js'; //单个引入暴露属性
function1()
function2()
//3.import
import * as functions from './fun'; //获取到一个包含所有暴露属性的对象
functions.function1();
functions.function2();

3.export default暴露和获取数据的方式,和module.exports的差别

export default暴露的是个default对象,一般用export default暴露,就用import获取

//暴露方式
var func1 = function() {
  console.log("func1");
};
var func2 = function() {
  console.log("func2");
};
export default { //类似 module.exports = {}
  function1: func1,
  function2: func2
}
//获取方式
import fun from './fun.js'
//import {function1} from './fun.js';//module.exports可以用,export default不能用
fun.function1();

var function1 = require("./fun.js");
function1.default.function1()

import * as functions from './fun';
functions.default.function1()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

module.exports、exports和export、export default的区别,import和require的区别 的相关文章

  • 使用 Ruby on Rails ActiveSupport::Concern 功能时如何“嵌​​套”包含模块?

    我正在使用 Ruby 1 9 2 和 Ruby on Rails v3 2 2 gem 鉴于我正在使用 RoR 我想 嵌套 包含模块ActiveSupport 关注 http api rubyonrails org classes Acti
  • VBA Excel 提示用户选择默认文件夹中的文件

    我想提示用户在默认文件夹中打开 Excel 文件 我不知道如何打开默认文件夹 Sub Program1 DefaultFolder C user dump FName Application GetOpenFilename If FName
  • 如何导入名称与我的包中的模块冲突的模块?

    我的目录中有几个 python 模块 在同一目录下 我有一个包tests 我很想将模块命名为tests与它们包含测试的模块相同 尽管这当然并不重要 So in tests foo我天真地写着import foo 这不太好用 它是导入的tes
  • Golang 中的“相互”包导入

    是否可以在 Golang 中执行 相互 包导入之类的操作 举例来说 我有两个包 A 和 B 分别具有 AFunc 和 BFunc BFunc2 函数 package A import B func AFunc do stuff but al
  • 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
  • Intellij 12 - 无法重新导入模块

    所以今天我遇到了一个奇怪的问题 我在 IntelliJ 中的一个模块遇到了一些问题 所以我决定尝试将其清除并从新的结账中重建它 我从 项目 窗口中删除了该模块 然后从我的文件系统中删除 重新下载 我回到 Intellij 并尝试导入该模块
  • Node js:如何获取文件签名标头而不是 mime 类型?

    我下载了this https www npmjs com package mime types我的 Node js 项目的模块 它似乎在某种程度上工作正常 如果你console log mime lookup pathToFile 它返回文
  • 如何在模块中使用“before_action”

    我想在模块中使用 before action 不幸的是 我无法让它发挥作用 我正在谷歌搜索 但我发现的一切都无法解决问题 我的模块文件如下所示 module ShowController include SimpleController b
  • 如何在 Mac 上安装 Beautiful Soup 模块?

    我读了这篇文章但没有找到解决方案 http docs python org install index html http docs python org install index html 正常 的方法是 访问美丽汤网站 http ww
  • 用于将 MS Word 表导出到 Excel 工作表的宏

    我有一个包含许多表格的word文档 有谁知道如何编写宏将此类表导出到不同的 Excel 工作表 答案摘自 http www mrexcel com forum showthread php t 36875 http www mrexcel
  • 将数据从 Google Drive 中的 CSV 文件导入到 Google Sheet

    我使用 SAS 每 24 小时生成两个 CSV 文件 我使用 bat 脚本将生成的 CSV 文件保存在 Google Drive 的文件夹中 CSV 文件被替换 因此文件夹中始终只有这两个文件 CSV 文件以 分隔 并且仅包含三列或四列 我
  • CodedUI 测试不从 CSV 输入文件读取数据

    我在使用编码 UI 测试方法映射 CSV 文件时遇到困难 这很可能是一个愚蠢的问题 但我似乎找不到解决我的问题的方法 至少没有一个有效的方法 我已确保将 CSV 文件的属性设置为始终复制 我还通过在测试方法上方写入以下行来导入 CSV 文件
  • Excel 在“.xls”中发现不可读的内容。同时导出水晶报表到excel

    我正在将数据从 Crystal 报告导出到 PDF 工作正常 并显示所有记录 但是当我将其导出到 Excel 文件中并成功导出时 以及当我在 Excel 中打开它时给出错误消息 文件错误 数据可能已丢失 当我点击 确定 按钮时 在 Exce
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • Excel VBA 导出到文本文件。需要删除空行

    我有一个工作簿 使用以下脚本将其导出到文本文件 它工作正常 但是当我打开文本文件时 末尾总是有一个空行 这导致我在生成此文本文件后运行的另一个脚本出现问题 有关如何从导出中删除空行的任何帮助 Code Sub Rectangle1 Clic
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你
  • 在文件之间共享 mqtt 客户端对象

    我这样连接到 MQTT mqtt js const mqtt require mqtt var options needed options var client mqtt connect mqtt someURL options clie
  • 如何在 iOS 中注册自定义文件类型

    我目前正在创建一个应用程序 我想让用户在其中备份他们的文件 plist m4a 我压缩文件并将扩展名更改为自定义扩展名 专门针对我的应用程序 例如 MyBackup 然后 用户可以通过电子邮件或 iTunes 文件共享进行导出 我已经阅读过
  • 如何在 erlang 中安装模块?

    我是 Erlang 新手 想知道如何安装第三方模块以在我的 Web 应用程序中使用 您将这些文件放在哪里以及执行什么类型的命令 如果您希望在系统范围内安装第 3 方库 例如 Mochiweb 最好将其设置在 ERL LIBS 环境变量下 我
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方

随机推荐

  • 解决ubuntu上的samba共享无法被windows访问问题

    年后回来发现自己ubuntu服务器的samba共享访问不了了 先来看看samba的log记录的啥 root cat var log samba log smbd 2022 02 14 09 19 46 514611 0 lib util f
  • Android仿微信未读消息数提示数字之BadgeView的使用

    没事在整理以前上班收藏的一些笔记 xff0c 发现其中的关键字部分有个 BadgeView 不知道是什么东东 xff0c 于是乎搜了下 xff0c 发现也是一个项目中很常用的功能 比如 xff1a 这样的 xff0c 很常见 这是官方的de
  • cocos creator 游戏背景音乐处理(音乐循环淡入淡出等)

    在处理游戏背景音乐中遇到的问题 xff0c 策划对于音乐播放提出新的想法 但由于目前周围没有人尝试过 xff0c 所以自己摸索的来 需求 在同一场景音乐处理 一般同一场景是同一首背景音乐 现需求在同一场景 xff08 时代 xff09 内播
  • Linux 进程状态D Disk Sleep

    Linux进程状态 xff1a S TASK INTERRUPTIBLE xff0c 可中断的睡眠状态 处于这个状态的进程因为等待某某事件的发生 xff08 比如等待socket连接 等待信号量 xff09 xff0c 而被挂起 这些进程的
  • 两个超实用的 Kubernetes 集群中 Flannel 故障排除案例

    自建的 K8s 集群的坑不少 尤其是到了 Node 数量越来越多之后 问题也逐渐显露了出来 博客主要介绍我们使用flannel之后遇到的两个问题以及解决方案 问题其实不严重 只是涉及到了底层的结构 改动时候要小心 问题 1 flannel
  • 解决zsh: command not found问题

    zsh command not found 看字面意思就是找不到这个方法 xff0c 缺少环境变量配置 1 打开zsh配置文件 open zshrc 2 添加缺少的文件路径 PATH 61 34 Users mengmeng Downloa
  • Python两大爬虫库

    文章目录 Python两大爬虫库urllib库urllib库使用urllib request实验案例 xff1a 模拟头部信息 requests库实验案例 get请求实验案例 抓取网页实验案例 响应 在使用Python爬虫时 xff0c 需
  • amixer命令

    简述amixer及其用法 alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个 xff0c 用于配置音频的各个参数 alsamixer是基于文本下的图形界面的 xff0c 可以通过键盘的上下键 xff0c 左右键等 x
  • 安装ubuntu系统中磁盘分区

    硬件 xff1a vostro 1450 xff0c 本身有一块机械硬盘HDD xff08 500G xff09 加了一块固态硬盘SSD xff08 120G xff09 xff0c 组成HDD 43 SSD双硬盘 目的 xff1a SDD
  • Could not find encoder for codec id 27: Encoder not found

    在detectron2测试demo时出现如题所示问题 xff0c 解决 xff1a 改 xff1a fourcc 61 cv2 VideoWriter fourcc 34 x264 34 为 xff1a fourcc 61 cv2 Vide
  • Ubuntu查看磁盘使用情况

    xff08 1 xff09 查看文件大小 查看当前文件夹下所有文件大小 xff08 包括子文件夹 xff09 du sh du h 15M package 16K fontconfig 4 0K cache 5 1M rpmdb 20M 查
  • 最简单的方式解决ubuntu 16.04 屏幕亮度问题

    本教程不需要修改grub xff08 因为我的ubuntu 没有 sys class backlight intel backlight brightness 这个目录 xff09 xff0c 我也装过brightness indicato
  • 按列合并两个.txt 文件

    一颗行走的大白菜 转载请标明出处 网上给出了好多答案 xff0c 动辄几十行的python 脚本让人好烦 xff0c 然后我们的linux仅仅需要一条命令就能解决 xff1a 先给出截图 xff1a 我要合并read txt read1 t
  • python: np.pad() 函数的用法

    在卷积神经网络中 xff0c 为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失 xff0c 常常采用图像边缘填充技术 xff0c 即在图像四周边缘填充0 xff0c 使得卷积运算后图像大小不会缩小 xff0c 同时也不会丢失边缘和角落
  • matlab 如何使用mex

    MATLAB与C语言混合编程接口 MATLAB是一种解释性语言 xff0c 不需要编译 xff0c 调试比较方便 xff0c 但是缺点是速度慢 这一点在执行复杂的科学算法的时候体现极为明显 而C语言虽然相对比 较复杂 xff0c 但是执行效
  • 关于在终端能到import模块 而在jupyter notebook无法导入的问题

    这个问题让我查了许多天才解决 xff0c 为了避免后面的人重复走弯路 xff0c 记录下来 问题描述 xff1a 我在ubuntu 下编译安装了caffe xff0c 在命令行模式下可以import caffe xff0c 但是在jupyt
  • PCA原理

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net zhongkelee article details 44064401 转载请声明出处 xff1a http blog cs
  • 当表格太大超过一栏时

    表格大小的调整 当表格太大超过一栏时 xff0c 可以调节 首先文章导言区加入 usepackage graphicx 然后在要缩小的位置加入语句 resizebox 0 5 textwidth 要缩小的表格 要注意的是要把待缩小的表格放到
  • 安装了keras,报错 importerror: no module named kears

    原因可能如下 xff1a 你使用的python 默认是2 7 或者是3 6 xff0c 而keras 安装到了python3 5或python 3 6 的路径下 xff0c 此时 xff0c 你需要重新安装keras并指定安装路径 可以测试
  • module.exports、exports和export、export default的区别,import和require的区别

    在vue及其他模块化开发中 xff0c 经常会用到这些输出和引用的语句 xff0c 那么 xff0c 怎么在合适的时候用合适的语句呢 xff0c 怎么区分它们呢 xff1f 一 理论区别 首先 xff0c module exports和ex