前端工程化之【模块化规范】

news2024/9/23 11:19:46

在这里插入图片描述

目录

  • 模块化概述:
    • 什么是模块化
    • 为什么需要模块化
  • 有哪些模块化规范
    • 导入与导出的概念
    • CommonJS 规范
    • ES6 官方模块化规范
    • 导出数据
    • 导入数据
      • Node 中运行 ES6 模块

模块化概述:

什么是模块化

将程序文件依据一定规则拆分成多个文件,这种编码方式就是模块化的编码方式。
本质上拆分出来的每个文件就是一个模块,模块中的数据默认都是私有的,模块之间互相隔离。
同时也能通过一些手段,可以把模块内的指定数据“抛出去”,供其他外部模块使用。

为什么需要模块化

随着应用的复杂度越来越高,其代码量和文件数量都会急剧增加,会逐渐引发以下问题:

在这里插入图片描述

在这里插入图片描述

  • 数据安全问题

有哪些模块化规范

历史背景:2009 年,随着 Node.js 的出现,JavaScript 在服务器端的应用逐渐增多,为了让 Node.js 的代码更好维护,就必须要制定一种 Node.js 环境下的模块化规范,来自 Mozilla 的工程师 Kevin Dangoor 提出了 CommonJS 规范(CommonJS 初期的名字叫 ServerJS),随后 Node.js 社区采纳了这一规范

随着时间的推移,针对 JavaScript 的不同运行环境,相继出现了多种模块化规范,按时间排序,分别为:

在这里插入图片描述

其中 AMD 以及 CMD 规范,目前已经渐渐淡出视野了,本文主要讲述 CommonJS 以及 ES6官方模块化标准


导入与导出的概念

模块化的核心思想就是:模块之间默认是私有隔离的,通过导入和导出进行数据和功能的共享。

  • 导出(暴露):

模块向外公开其内部的一部分(如变量、函数等),使这些内容可以被其他模块使用。

在这里插入图片描述

  • 导入(引入):

模块引入和使用其他模块导出的内容,以使用代码和功能。

在这里插入图片描述

在这里插入图片描述


CommonJS 规范

CommonJS 标准中,导出数据有两种方式:

  • 第一种方式:module.exports = value
  • 第二种方式:exports.name = value
const name = 'javaScript'
const motto = '前端技术栈'

function getTel (){
  return '66666666666666'
}

function getHobby(){
  return ['数据一''数据二']
}

// 通过给exports对象添加属性的方式,来导出数据(注意:此处没有导出getHobby)
exports.name = name
exports.slogan = slogan
exports.getTel = getTel

在这里插入图片描述
CommonJS模块化标准中,使用内置的 require 函数进行导入数据

// 直接引入模块
const test = require('./test')

// 引入同时解构出要用的数据
const { name, slogan, getTel } = require('./test')

// 引入同时解构+重命名
const {name:stuName,motto,getTel:stuTel} = require('./test')

扩展导读

一个 JS 模块在执行时,是被包裹在一个内置函数中执行的,所以每个模块都有自己的作用域,我们可以通过如下方式验证这一说法:

console.log(arguments)
console.log(arguments.callee.toString())

内置函数的大致形式如下:

function (exports, require, module, __filename, __dirname){
  /*********************/
}

ES6 官方模块化规范

ES6 模块化规范是一个官方标准的规范,它是在语言标准的层面上实现了模块化功能,是目前最流行的模块化规范,且浏览器与服务端均支持该规范。查看 ESM 官方详情

导出数据

ES6 模块化提供 3 种导出方式1.分别导出、2.统一导出、3.默认导出

【分别导出】

// 导出name
export let name = {str:'测试数据'}
// 导出slogan
export const slogan = '一个字符串数据'

// 导出getTel函数
export function getTel (){
  return '66666666'
}

【统一导出】

const name = {str:'测试数据'}
const slogan = '一个字符串数据'

function getTel (){
  return '666666666'
}

function getCities(){
  return ['北京','上海','深圳','成都','武汉','西安']
}

// 统一导出了:name,slogan,getTel
export {name,slogan,getTel}

【默认导出】

const name = '张三'
const motto = '走自己的路,让别人五路可走!'

function getTel (){
  return '13877889900'
}

function getHobby(){
  return ['前端','后端','测试']
}

//默认导出:name,motto,getTel
export default {name,motto,getTel}

备注 :「上述多种导出方式,可以同时混合使用

// 导出name ———— 分别导出
export const name = {str:'测试数据'}
const slogan = '一个字符串数据'

function getTel (){
  return '010-56253825'
}

function getCities(){
  return ['北京','上海','深圳','成都','武汉','西安']
}

// 导出slogan ———— 统一导出
export {slogan}
// 导出getTel ———— 默认导出
export default getTel

导入数据

对于 ES6 模块化来说,使用何种导入方式,要根据导出方式决定

1.「导入全部」(通用)

可以将模块中的所有导出内容整合到一个对象中。

import * as test from './test.js'

2.「命名导入」(对应导出方式:分别导出、统一导出)

import { name,slogan,getTel } from './test.js'

通过 as 重命名

import { name as myName,slogan,getTel } from './test.js'

3.「默认导入」(对应导出方式:默认导出)

import test from './test.js' //默认导出的名字可以修改,不是必须为test

4.「命名导入 与 默认导入可以混合使用

「命名导入」与「默认导入」混合使用,且默认导入的内容必须放在前方

import getTel,{name,slogan} from './test.js'

5.「动态导入」(通用)

允许在运行时按需加载模块,返回值是一个 Promise

const test = await import('./test.js');
console.log(test)  //Promise

6.import 可以不接收任何数据

例如只是让 mock.js 参与运行

import './mock.js'

Node 中运行 ES6 模块

Node.js中运行ES6模块代码有两种方式:

  • 方式一:将 JavaScript 文件后缀从 .js 改为 .mjs,Node 则会自动识别 ES6 模块。
  • 方式二:在 package.json 中设置 type 属性值为 module

在这里插入图片描述


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区块链的含义是什么

目录 区块链的基本定义 区块链的构成与特性 区块链的类型 区块链的应用 区块链的基本定义 区块链是一种分布式数据存储、点对点传输、共识机制和加密算法等计算机技术的新型应用模式。它通过将数据区块按照时间顺序相连形成链式结构,确保数据的真实性和不可篡改…

代码随想录训练营 Day50打卡 图论part01 理论基础 98. 所有可达路径

代码随想录训练营 Day50打卡 图论part01 一、理论基础 DFS(深度优先搜索)和 BFS(广度优先搜索)在图搜索中的核心区别主要体现在搜索策略上: 1、搜索方向: DFS:深度优先,一条路走到…

突破教材,简单聊聊《文件系统》

文章目录 前言:文件系统的引入:认识物理磁盘: 对磁盘的存储进行逻辑抽象:LBA逻辑区块地址: 🚀文件系统的理解:理解各个区段:🛹深入理解 inode:inode和文件名&…

9.4日常记录

一、索英笔试 1.实现strcpy 1.char src[] "Hello, World!";: 这里定义了一个字符数组。这个字符串 "Hello, World!" 的内容被直接存储在这个数组中,数组的大小由字符串的长度加上一个额外的位置用于存储字符串结束符\0自动确定。 …

CSS英文换行

在CSS中,如果你想让英文单词换行,可以使用word-break: break-all;属性。这个属性会强制浏览器在任何字符之间进行换行,即使没有空格或其他分隔符。 没有加样式前的运行结果 CSS样式 p {word-break: break-all; } 运行结果 这将确保段落内的…

【弱监督时间动作定位】Probabilistic Vision-Language Representation for WSTAL 论文阅读

Probabilistic Vision-Language Representation for Weakly Supervised Temporal Action Localization 论文阅读 Abstract1 Introduction2 RELATEDWORK2.1 Weakly Supervised Temporal Action Localization2.2 Vision Language Pre-training2.3 Probabilistic Representation 3…

VS2022卸载记录

Releases microsoft/VisualStudioUninstaller (github.com) 在上面的网址中下载压缩包 下载之后解压,之后选择红框文件,右键选择以管理员身份运行 输入Y,回车 ,之后等待程序执行结束 该操作之后,我发现我的安装目录中…

CentOS7 MySQL 数据库基本使用

3.查看当前库中存在哪些表 mysql> show tables 4.查看表的结构 mysql> describe user mysql> describe mysql.user 5.查询数据库服务的基本信息 mysql> status 二、创建及删除库和表 1.创建新的库 CREATE DATABASE 语句:用于创建一个新的库&…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码(压缩)视频数据?✨如何编码(压缩)数据🎄简单的例子🎄音视频编码方式🎄视频编码格式H264编码是什么?发展历程?H.264基…

使用python+opencv解析图像和文本数据

1. 创建虚拟环境 新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令: python -m venv venv2. 激活虚拟环境 在终端中输入以下命令: venv\Scripts\activate3. 安装依赖 在终端中输入以下命令: pip install opencv-pythonpip inst…

docker pull命令拉取镜像失败的解决方案

docker pull命令拉取镜像失败的解决方案 一、执行docker pull命令,拉取镜像失败 报错信息:error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/51/5107333e08a87b836d48f…

第86集《大佛顶首楞严经》

《大佛顶如来密因修正了义诸菩萨万行首楞严经》。监院法师慈悲,诸位法师,诸位同学,阿弥陀佛! 请大家打开讲义188面 我们这一科讲到,辛三、盗戒。透过大乘的理观跟事修,所谓大乘的戒法来对治偷盗的行为跟偷…

EasyExcel单行或多行表头的简单Excel导出

一般Excel不需要复杂的数据格式导出,只是在表头上略有区别,下面展示单行和多行表头Excel导出 1、单行表头 例如:Excel表头只有单行,那就只需要使用注解ExcelProperty即可实现 ① 添加依赖 首先,在 pom.xml 中添加 E…

zhidianyun01/基于 ThinkPHP+Mysql 的智慧园区+智慧园区管理系统+园区物业管理系统+园区物业管理系统源码

园区物业管理系统园区管理系统园区管理园区物业物业管理系统园区物业管理系统源码 软件架构 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示

imap发送邮件:如何配置IMAP服务器发邮件?

imap发送邮件的设置教程?如何使用IMAP服务发送邮件? IMAP发送邮件作为一种高效的邮件管理方式,允许用户在多个设备上同步邮件,极大地提升了工作效率。AokSend将详细介绍如何配置IMAP服务器以实现邮件的发送。 imap发送邮件&…

Linux入门攻坚——31、rpc概念及nfs和samba

NFS:Network File System 传统意义上,文件系统在内核中实现 RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…

通过FFmpeg和URL查看流的编码格式

FFmpeg下载后会有三个执行文件,跳转到FFmpeg所在文件夹 查看视频流URL地址的编码格式命令: // 在下载ffmpeg的文件夹中执行如下命令,可查看流的编码格式,这里的测试流是H264编码ffprobe http://devimages.apple.com/iphone/sample…

CSS学习13

CSS例子 学成网 需要使用的图片&#xff1a; 代码&#xff1a; <html><head><style>/*CSS初始化*/* { /*清除内外边框*/padding: 0;margin: 0;}ul {list-style: none; /*清除列表样式*/}.clearfix:before,.clearfix:after { /*清除浮动*/content: &qu…

C++11(1)

目录 前言 小故事 C11优势 统一的列表初始化 1.{}初始化 2. std::initializer_list 声明 1.auto 2.decltype 3.nullptr 前言 小故事 1998 年是 C 标准委员会成立的第一年&#xff0c;本来计划以后每 5 年视实际需要更新一次标准&#xff0c; C 国际 标准委员会在研究…

如何使用ChatGPT撰写研究计划书?AI写作全攻略

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步&a…