• 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
  • 相关阅读:
    Qt中QPropertyAnimation动画效果展示
    从零开始:使用ChatGPT快速创作引人入胜的博客内容
    测试面经 | 从测试螺丝钉到大厂测试开发,三点成长心得和面试经验
    SSRF 漏洞笔记
    探究Spring Boot中@PostConstruct注解的使用场景
    Delphi Xe 10.3 钉钉SDK开发——审批流接口(获取表单ProcessCode)
    小程序的 web-view 组件:实现点击跳转外部链接的高级技巧
    高级 ECharts 技巧:自定义图表主题与样式
    苹果电脑 删除已安装的node
    C# 使用AForge调用摄像头
  • 原文地址:https://blog.csdn.net/m0_62181310/article/details/126924082