• ES6模块化(ES module)


    一、ES6模块化(ES module)

    1.模块化的分类

    在 ES6 模块化规范诞生之前,JavaScript 社区已经尝试并提出了AMDCMDCommonJS 等模块化规范。
    但是,这些由社区提出的模块化标准,还是存在一定的差异性与局限性、并不是浏览器与服务器通用的模块化标准。

    例如:

    • AMD 和 CMD 适用于浏览器端的 Javascript 模块化
    • CommonJS 适用于服务器端的 Javascript 模块化
      • 导出:module.exports = 导出的内容
      • 导入:require('模块')

    太多的模块化规范给开发者增加了学习的难度与开发的成本。因此,官方的ES6 模块化规范诞生了!

    2.为什么要学习ES6 模块化规范

    ES6 模块化规范是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习 AMDCMDCommonJS 等模块化规范。

    ES6 模块化规范中定义:

    • 每个 js 文件都是一个独立的模块
    • 导入其它模块成员使用 import 关键字
    • 向外共享模块成员使用 export 关键字

    3.在nodejs中使用ES6模块化

    node.js 中默认仅支持 CommonJS 模块化规范,若想基于 node.js 体验与学习 ES6 的模块化语法,可以按照如下两个步骤进行配置:

    1. 确保安装了 v13.0.0 或更高版本的 node.js
    2. package.json 的根节点中添加 "type": "module" 节点
      • type,默认是commonjs,表示项目代码 只能 使用 CommonJS 语法(只能使用 module.exports 导出,使用require导入)
      • type 配置为 “module” 之后,表示项目代码 只能 使用 ES6模块化语法

    二、ES6模块语法

    1.ES6模块语法3 种用法:

    • 默认导出与默认导入
    • 按需导出与按需导入
    • 直接导入并执行模块中的代码
    1.1默认导出与默认导入

    默认导出的语法: export default 默认导出的成员
    默认导入的语法: import 接收名称 from '模块路径'

    • 导出
    const a = 10
    const b = 20
    const fn  = () => {
      console.log('这是一个函数')
    }
    // 默认导出
    // export default a  // 导出一个值
    export default {
      a,
      b,
      fn
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 导入
    // 默认导入时的接收名称可以任意名称,只要是合法的成员名称即可
    import result from './xxx.js'
    console.log(result)
    
    • 1
    • 2
    • 3

    注意点:

    • 每个模块中,只允许使用唯一的一次 export default
    • 默认导入时的接收名称可以任意名称,只要是合法的成员名称即可
    1.2按需导入与按需导出

    按需导出的语法: export const s1 = 10
    按需导入的语法: import { 按需导入的名称 } from '模块标识符'

    按需导出的语法:

    export const a = 10
    export const b = 20
    export const fn = () => {
      console.log('内容')
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    按需导入的语法:

    import { a, b as c, fn } from './xxx.js'
    
    • 1

    注意事项:

    • 每个模块中可以有多次按需导出
    • 按需导入的成员名称必须和按需导出的名称保持一致
    • 按需导入时,可以使用 as 关键字进行重命名
    • 按需导入可以和默认导入一起使用

    将所有内容全部导入:

    import * as obj from './03-按需导出.js'
    console.log(obj)
    /**
     * {
     *   uname: 'zhangsan',
     *   age: 20,
     *   fn: function ......,
     *   default: 'hello world'  // 叫做default这个,是默认导出的内容
     * }
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1.3直接导入模块(无导出):

    如果只想单纯地执行某个模块中的代码,并不需要得到模块中向外共享的成员。
    可以直接导入并执行模块代码,示例代码如下:import '模块的路径'

    //xxx.js
    for (let i = 0; i < 10; i++) {
      console.log(i)
    }
    // 导入该模块
    import './xxx.js'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    导入内置模块和第三方模块:

    // 内置模块,支持默认导入
    import fs from 'fs'
    
    // 内置模块,支持按需导入
    import { readFile, writeFile } from 'fs'
    
    // 第三方模块,肯定支持默认导入(按需导入不一定支持,因为我们并不知道别人的模块是怎么写的)
    import dayjs from 'dayjs'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    强网杯2022 pwn 赛题解析——yakacmp
    为什么需要对jvm进行优化,jvm运行参数之标准参数
    【多模态论文】CLIP(Contrastive Language-Image Pre-training)
    D. Challenging Valleys
    HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介
    通讯协议学习之路:QSPI协议理论
    【数据结构C/C++】优先(级)队列
    Unix Network Programming Episode 56
    spring创建bean方式
    (十一)数据结构-线索二叉树
  • 原文地址:https://blog.csdn.net/m0_62181310/article/details/126924082