ES6 module.exports和export详解

2023-05-16

module.exports和export详解

  • 前言
  • 一、commonJs:
    • 使用步骤
    • 1.导出属性
    • 2.导出类
  • 二、ES6规范
    • 对外暴露的方式
      • 分别暴露
      • 统一暴露
        • 暴露的时候指定别名
      • 默认暴露
    • 引入方式
      • 1.解构赋值引入
      • 2.直接引入
      • 3. 通配符导入


前言

概念:module.exports和exports是属于commonJs规范,export和export default是ES6模块规范。

  • exports 和module.exports 这两个导出对象,变量 ,方法,可以在全局使用 require(‘./a’)。
    当两个同时在一个模块导出对象时只有module.exports导出有效。
  • 在es5中遵循了commonJs module.exports导出模块 require 引入模块
  • exports 和module.exports 必须后面跟=
    • exports=
    • module.exports =
  • es6 不需要=
    • export ...
    • export default ...

一、commonJs:

exports 等于 module.exports,相当于在js文件头部,有一个module对象,

module.exports = exports;

exports是一个对象,所以可以exports多个值

module.exports 初始值为一个空对象 {}
exports 是指向的 module.exports 的引用
require() 返回的是 module.exports 而不是 exports

也就是:
exports = module.exports = {}, exportsmodule.exports都指向一个引用地址{}
如果exports.name = 'xxx',那module.exports = {name:'xxx'}
引用对象改变,两者又是同时指向一个对象,所以都改变了。

使用步骤

1.导出属性

对于要导出的属性,可以简单直接挂到exports对象上

exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};
const getWebsocket = ()=>{}
exports.getWebsocket = getWebsocket;

2.导出类

对于类,为了直接使导出的内容作为类的构造器可以让调用者使用new操作符创建实例对象,应该把构造函数挂到module.exports对象上,不要和导出属性值混在一起

// 暴露.js
module.exports = function(name, age) {
    this.name = name;
    this.age = age;
    this.about = function() {
        console.log(this.name +' is '+ this.age +' years old');
    };
};
var A = require('暴露.js'); var a = newA(name, age);

二、ES6规范

  • 每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取。 一个模块就是一个单例,或者说就是一个对象;
  • 每一个模块内声明的变量都是局部变量, 不会污染全局作用域;
  • 模块内部的变量或者函数可以通过export导出;
  • 一个模块可以导入别的模块

对外暴露的方式

分别暴露

export let a = 1
export function fun(){
	console.log("你好")
}

统一暴露

let a = 1
function fun (){
	console.log("你好")
}
export { a , fun }

暴露的时候指定别名

在export接口的时候, 我们可以使用 XX as YY, 把导出的接口名字改了
比如: fn1(实际export) as SayHi(别名), 把这些接口名字改成不看文档就知道干什么的
在引用文件这样用 import {SayHi} from ‘…/…/xx.js’;

// 暴露.js
let fn1 = function() {console.log('sayHi')};
export { fn1 as sayHi };
// 引用.js
import { sayHi } from '暴露.js'

默认暴露

一个js文件中只能有一个默认暴露,默认暴露的可以是一个常量,函数,对象等。

let a = 1
function fun (){
	console.log("你好")
}
export { a , fun }

//默认暴露一个对象
let a = 1
function fun (){
	console.log("你好")
}
export default { a , fun }

引入方式

1.解构赋值引入

对于分别暴露,一般使用解构赋值来引入

import { a , fun } from "文件路径"
//此时当前模块便含有 a 变量,和fun函数
console.log(a)// 1
fun()// 你好

2.直接引入

对于默认暴露,直接引入即可
如果要引入的js模块默认暴露的是一个函数

//如果要引入的js模块默认暴露的是一个函数
import f from "文件路径"  //此处引入的就是一个函数
f() // 你好

如果要引入的js模块默认暴露的是一个对象

//如果要引入的js模块默认暴露的是一个对象
import objName from "文件路径"  //此处引入的也是一个对象
 console.log(objName.a) // 1
 objName.fun() // 你好

3. 通配符导入

在import的时候可以使用通配符*导入外部的模块:
import * as xxx from ‘xxx’: 会将若干export导出的内容组合成一个对象返回;
import xxx from ‘xxx’:(export default Din)只会导出这个默认的对象作为一个对象;

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

ES6 module.exports和export详解 的相关文章

  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • Prism / MEF:如何在不硬编码区域名称的情况下注册ViewWithRegion

    我们正在构建一个 WPF Prism 应用程序 我们有不同的开发人员从事不同的模块项目 并且多个模块被注入到主应用程序外壳中 主应用程序也是一个单独的项目 我们还希望能够在不同的应用程序中使用这些模块 我们不希望在每个应用程序中都使用相同的
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 重复条目:自定义 Android 模块中的 org/appcelerator/titanium/gen/bindings.json

    设置 问题 我为 Titanium 创建了一个自定义 Android 模块 用于在 Ti 内显示 Gif 动画 模块源代码可以在这里找到 https github com m1ga com miga gifview https github
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • 将图层坐标导出到 Excel 的脚本

    我找到了一个脚本 可以将我的图层坐标从 Photoshop CS5 导出到 XML 我希望这里有人可以帮助我编辑该脚本以将坐标记录到 xls 文件中 另外 如果可以将每个坐标放在单独的行上 那就太好了 下面是我想修改以满足我需要的脚本 Th
  • 在模块中使用shiny的renderUI

    这是我在 stackoverflow 上的第一个问题 我在闪亮 1 0 5 中遇到模块和 renderUI 的问题 当我在中使用 renderUI 时 Main Part ui lt bootstrapPage uiOutput Dynam
  • 如何在没有本地存储库的情况下在远程运行 git 命令

    我有一个名为 git export 的脚本 它可以帮助我导出远程存储库 它是这样运行的 git export http host com git repo lt t tag or b branch or c commit gt local
  • K2_内容模块评级

    我一直在category item php 中重建标准K2 评级 以查看评级从显示为星星到显示为数字 我所做的是 我替换了这段代码 div div class itemRatingForm ul class itemRatingList l
  • Python:选择多个已安装模块版本之一

    在我的系统上 我多次安装了多个模块 举个例子 numpy 1 6 1安装在标准路径中 usr lib python2 7 dist packages 我有一个更新版本numpy 1 8 0安装于 local python lib pytho
  • 检查没有 .svn 文件的 svn 存储库

    我的专用服务器 Centos 5 5 上有一个 svn 存储库 位于 var svn myRepository 我只想将这些文件复制到我的生产文件夹 var www myWebapp 中 据我了解 SVN 我只能在本地项目文件夹上使用 sv
  • 如何使用 LotusScript 将富文本字段从 Notes 导出为 HTML?

    我正在执行一项数据迁移任务 必须将一个较大的 Lotus Notes 应用程序导出到博客平台中 我的第一个任务是将 Lotus Notes 中的文章导出到 CSV 文件中 我在 LotusScript 中创建了一个代理来将数据导出到 CSV
  • 没有名为 pandas_datareader 的模块

    我刚刚安装了pandas datareader using pip install pandas datareader运行成功 现在我尝试将它用于教程 当我尝试导入时出现此错误 import pandas datareader as pdr
  • 从内存加载动态库

    是否可以从内存而不是从 mac gcc 上的文件系统加载库 在 Windows 中 我使用 MemoryModule 但它显然不跨平台兼容 首先 要做到这一点 我建议您阅读OS X ABI 动态加载器参考 https developer a
  • 为所有用户持久安装 PowerShell 模块

    我正在通过以下方式安装 PowerShell 模块八达通部署 http octopusdeploy com 到许多不同的服务器上 出于测试目的 我按照 Microsoft 文档的指导进行了安装PowerShell模块 https learn
  • Pandas datetools模块错误

    我正在尝试从 pandas datetools 调用模块 但收到错误消息 指出 mofule 对象没有我所调用的名称的属性 想知道是否有人可以阐明这个问题 下面是我尝试使用的代码 import blpapi import pandas as
  • 在 config/main.php 中找不到 Yii2 模块(不在 /vendor 文件夹下)类

    我在 api 文件夹下创建了一个模块 它本身与 yii2 高级应用程序中的后端和前端处于同一级别 文件夹结构 api 常见的 控制器 楷模 配置 模块 v1 控制器 楷模 运行 测试 网络 在 api config main php 中 r
  • 哪些 babel 设置适合导出库?

    我是 Babel Webpack 的新手 对 babelrc 配置有一些困惑 第一个配置 presets babel env modules false useBuiltIns usage targets gt 0 25 not dead

随机推荐

  • Git命令:切换分支 & 下载指定分支命令

    git一般有好多分支 xff0c 最近项目中将master分支代码clone到本地 xff0c 用到一些git命令 xff0c 于是记录一下 1 查看远程分支 git branch a git branch a dev master rem
  • 无人机POS数据中GPS/IMU数据的解析(航向角、俯仰角、翻滚角)

    POS数据参数的介绍 无人机在飞行作业时 xff0c 获取的无人机影像通常会携带配套的POS数据 从而在处理中可以更加方便的处理影像 而POS数据主要包括GPS数据和IMU数据 xff0c 即倾斜摄影测量中的外方位元素 xff1a xff0
  • PyTorch 训练时中遇到的卡住停住等问题

    目录 前言1 PyTorch 训练时在第一个 epoch 的最后一个 batch 卡死 问题描述 可能的原因 解决方法 2 使用命令行运行时 xff0c 卡在第一个 epoch 问题描述 原因分析 解决方法 前言 在实际训练中遇到了各种各样
  • 【CSS】CSS的三种使用方式

    CSS的三种使用方式 CSS内联样式 xff08 行内样式 xff09 内部样式表外部样式表 CSS 网页分成三部分 结构 xff08 HTML xff09 表现 xff08 CSS xff09 行为 xff08 JavaScript xf
  • kubernetes 控制平台和节点之间的通信

    这篇文章也是翻译的官网 xff1a Control Plane Node Communication 这篇文章主要罗列 xff08 catelogs xff09 控制平台 xff08 更确切的说是apiserver xff09 和工作节点
  • LPMS-IG1 IMU内参标定

    LPMS IG1 IMU内参标定流程 1 安装IMU驱动 2 安装标定软件 3 录包 4 标定 IMU驱动安装 参考IMU官网驱动安装流程 xff0c 链接 xff1a https www alubi cn support download
  • WebScarab拦截WebGoat的请求

    第一步 xff1a 配置WebSarab的Proxy xff0c 使得与WebGoat的端口相同 第二部 xff1a 开启WebSarab应用 xff0c 然后开启webGoat http localhost WebGoat attack
  • webpack常见错误的解决办法

    项目列表 1 安装webpacke 在本项目中安装webpack xff0c save dev的意思是将依赖写入项目的package json文件 npm install save dev webpack 安装过程中如果出现类似上述的提示
  • /usr/bin/ld: cannot find -lnvcuvid

    我们在安装cuda后 xff0c 会测试cuda的安装情况 xff0c 在 sample文件夹中sudo make后会出现这样的错误 xff1a usr bin ld cannot find lnvcuvid 而我们的解决方案就是你使用的网
  • UML建模与软件开发设计(六)——类图设计与类之间的关系

    3 2 5 关联关系的分类 然而 xff0c 通过关联关系来描述类与类时还是比较抽象 xff0c 有些关系的细节难以通过关联关系表达出来 xff0c 比如类A与类B的角色定位 数量关系 xff0c 关联方向等都描述得不够清晰准确 xff08
  • 四轴PID讲解

    插播一条DJI招聘信息 常年有效 xff1a 包括控制算法 软件功能开发 SDK 嵌入式软件开发 GNSS接收机设计 测试开发 xff08 包括CI持续集成 xff09 请各位对空中机器人 xff0c 地面机器人 xff0c 教育机器人有兴
  • 守护进程

    本博客为本人学习UNIX高级环境编程总结 13 守护进程 13 1 简介 守护进程 xff08 daemon xff09 是生存期长的一种进程 它们常常在系统引导装入时启动 xff0c 仅在系统关闭时才终止 因为它们没有控制终端 xff0c
  • chmod +x,赋予“可执行”权限

    1 chmod 43 x的意思就是给执行权限 xff08 1 xff09 LINUX下不同的文件类型有不同的颜色 xff0c 绿色文件 xff1a 可执行文件 xff0c 可执行的程序 红色文件 xff1a 压缩文件或者包文件 蓝色文件 x
  • Flask-SQLAlchemy和alembic结合(步骤)

    在之前的数据库操作中 xff0c 我们新增一个字段是不是每次都得删除数据库表 xff0c 然后再重新将新创建的数据库表映射到数据库中 这样操作是不是很蛋疼 xff1f 是吧 xff1f 于是sqlalchemy作者拜尔为了解决这一问题 xf
  • pixhawk模块添加和修改以及经验分享

    我看了apm的代码半年 xff0c px4的代码也看了一段时间 xff0c 把我在这个过程遇到的问题和大家分享一下 xff0c 我觉得有些人也会遇到同样的问题 xff0c 给这部分人一点提示 谢谢大家 首先还是先从apm讲起 xff0c 它
  • 第一篇——记录自己的学习过程吧

    初次写博客 xff0c 希望记录一下自己的学习之路 xff0c 也希望以这种方式来监督提醒自己在这条喜欢的路上走下去 xff0c 希望再回首 xff0c 我能看的一个不一样的自己 本人大三程序员 xff0c 可以说是非常渣的那种 我选择软件
  • 什么是ELK?

    出处 xff1a https www cnblogs com aresxin p 8035137 html 我们在进行日志分析时 xff0c 目前的处理方式是在日志文件中grep xff08 一种强大的文本索引工具 xff09 awk xf
  • linux shell脚本将命令执行结果赋值给变量

    使用 例子 xff1a a 61 echo hello world 将命令echo 34 hello world 34 的输出赋给变量a
  • 网段、子网掩码计算方法

    计算 10 21 224 0 22 表示的网段 10 21 224 0 22 是表示网段的方法 xff0c 前面是ip或者子网 xff0c 后面的数字是掩码中高位算起1的位数 xff0c 22就是掩码的高位有22个1 xff0c 即 xff
  • ES6 module.exports和export详解

    module exports和export详解 前言一 commonJs 使用步骤1 导出属性2 导出类 二 ES6规范对外暴露的方式分别暴露统一暴露暴露的时候指定别名 默认暴露 引入方式1 解构赋值引入2 直接引入3 通配符导入 前言 概