不懂module.exports、exports、export的区别,我惨遭diss

简介: 【10月更文挑战第22天】不懂module.exports、exports、export的区别,我惨遭diss

背景

作为一个刚入职不久的菜鸡,我一直备受领导关注。这几天代码评审,领导问我module.exports、exports、export都有啥区别,怎么用。

仔细一想,我就好像都见过,但具体用途我还有点分不清。

我支支吾吾的说不都是导出模块引入模块的么,领导就diss我,这么基础的东西你都搞不明白,代码能写好?

我没敢顶嘴,先忍着,我先去学习吧!

模块规范简介

module.exports、exports、export的区别主要在于他们遵循的规范不同

规范名称 导出关键词 导入关键词 重命名变量 集体导出
commonjs module.exports / exports require {A :B } 不支持
esm export import as * as xxx

ES6出来以后,前端也支持模块的导入与导出了,因此,此时前端的模块规范就变成了esm。

再一个,不同规范不仅使用的关键词和特性不同,使用环境也不同:

nodejs中(webpack,babel)我们使用commonjs,浏览器中(vue的script标签 或 html 中带type="module"的script标签中)我们使用 esm

简单来说,平时开发都是基于esm规范,使用import语法,只有在脚手架的vue.config.js或者vite.config.js中使用commonjs。实际上,vite.config.js中也可以使用esm

commonjs规范

💡 commonjs规范: http://javascript.ruanyifeng.com/nodejs/module.html

CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exports 导出对外的变量或接口,通过 require() 来导入其他模块的输出到当前模块作用域中。

列子:

module.exports.double = function( value ){
   
    return value * 2;
}
var {
    double } = require('./moduleA');
var res = double(4);

为了方便,某些情况下module.exports可以简写为exports。其实一开始exports就是module.exports的引用。

module.exports===exports //true

所以上面的moduleA.js ,可以这样省略掉module

exports.double = function (value) {
   
    return value * 2;
}
var {
    double } = require('./moduleA');
var res = double(4);
console.log(res) //8

ECMAScript 规范

esm是es6语法,这个经常使用,必选会!

export 和 export default

ECMAScript主要特点是静态解析模块依赖,并且支持异步加载。

export:

-   export 语句用于导出模块中的多个变量、函数或类。导出的内容可以在其他模块中通过 import 语句导入。
-   适用于导出多个命名的变量或函数。
// a.js
export const hello = () => {
   
  console.log('hello');
};

export const fuck = () => {
   
  console.log('fuck');
};

// b.js
import {
    hello, fuck } from './a';
foo(); // 输出 'hello'
bar(); // 输出 'fuck'
  1. export default:

    • export default 语句用于导出模块的默认值。每个模块只能有一个默认导出。
    • 导入时可以使用任何名字。
// a.js
const a = () => {
   
  console.log('woo');
};

export default foo;

// b.js
import myFunction from './a';
myFunction(); // 输出 'woo'

总结

CommonJS 规范:

-   使用 module.exports 和 exports 进行模块导出。
-   主要用于 Node.js 环境。
-   模块导入使用 require 语句。
-   module.exports 是实际导出对象,可以导出任何类型的值。
-   exports 是 module.exports 的别名,适用于添加多个导出属性或方法。

ECMAScript(ES6)规范:

-   使用 export 和 export default 进行模块导出。
-   适用于现代 JavaScript 环境,包括浏览器和 Node.js(通过支持 ES6 模块的运行时)。
-   模块导入使用 import 语句。
-   export 用于导出多个命名的变量、函数或类。
-   export default 用于导出模块的默认值,每个模块只能有一个默认导出。
相关文章
|
XML 缓存 前端开发
Thymeleaf一篇就够了
Thymeleaf是Springboot官方支持的模板引擎,有着动静分离等独有特点,通过本文简单学习下吧!
64873 25
Thymeleaf一篇就够了
|
9月前
|
资源调度 JavaScript 前端开发
在Vue 3项目中集成Element Plus组件库的步骤
总结起来,在集成过程当中我们关注于库本身提供功能与特性、环境搭建与依赖管理、模块化编程思想以及前端工程化等方面知识点;同时也涵盖前端性能优化(比如上文提及“按需加载”)与定制化开发(例如“自定义主题”)等高级话题.
873 16
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
1023 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
JavaScript 前端开发 UED
PDF在线预览实现:如何使用vue-pdf-embed实现前端PDF在线阅读
本文详细介绍了如何在Vue项目中使用vue-pdf-embed实现PDF文件的在线展示。从项目初始化、插件集成到高级功能的实现和部署优化,希望对你有所帮助。在实际项目中,灵活运用这些技术可以大大提升用户体验和项目质量。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript IDE 开发工具
找不到模块“./App.vue”或其相应的类型声明。ts(2307)
这篇文章介绍了在Vue 3 + TypeScript + Vite开发环境中解决找不到`.vue`文件模块或其类型声明错误的两种方法:使用VSCode的TypeScript Vue Plugin (Volar)插件或手动在`env.d.ts`文件中声明`*.vue`模块类型。
3700 1
找不到模块“./App.vue”或其相应的类型声明。ts(2307)
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
4372 3
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
76374 5
详解HTTP四种请求:POST、GET、DELETE、PUT
|
前端开发 JavaScript
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
886 4
|
索引