• ES6 模块化编程 详解


    目录

    一、基本介绍

    二、基本原理示意图 

    三、传统CommonJS实现模块化编程

            1.介绍 : 

            2.实例 : 

    四、ES6新特性实现模块化编程

            1.介绍 : 

            2.实例 : 


    一、基本介绍

            (1) ES6新特性——模块化编程,用于解决传统非模块化开发中出现的"命名冲突", "文件依赖"等问题。

            (2) 类似于Java中可以引入其他已经写好的模块完成开发,JS也引入了模块化编程开发者只需要实现核心的业务逻辑即可

            (3) JavaScript中使用"Module"(/ˈmɑːdʒuːl/)来实现模块化编程。


    二、基本原理示意图 

                    在Java中,可以将多个功能相关的.java文件放在同一个包下进行统一管理,比如Java后端三层经典架构(Web层-Service层-DAO层);JS中的模块Module就是类似于这样的一种机制,其目的都是实现“分门别类,各司其职”。
                    JS模块化编程的基本原理示意图,如下所示 : 


    三、传统CommonJS实现模块化编程

            1.介绍 : 

            (1) CommonJS是一种 JavaScript 语言的模块化规范,它规定每个.js文件就是一个模块,有自己的作用域。在文件中定义的变量、函数、类或对象,都是私有的,对其他.js文件(即其他模块)都不可见

            (2) CommonJS使用格式——
                 module.exports = {} / exports = {}导出模块;(首先在要使用的其他模块中写下导出语句)
                 
    let / const var_name = require("__.js")导入模块。(然后在当前模块中写下导入语句)

            2.实例 : 

                    定义calculate.js,用来模拟要使用的其他模块,需要在calculate.js文件中定义导出语句。
                    calculate.js代码如下 : 

    1. //def some variables and constants
    2. let color = "cyan";
    3. const PI = 3.1415926;
    4. const E = 2.71828182;
    5. //The function used to calculate the sum of two numbers
    6. let plus = function (number1, number2) {
    7. return parseInt(number1) + parseInt(number2);
    8. }
    9. //The function used to calculate the difference of two numbers
    10. let minus = function (number1, number2) {
    11. return parseInt(number1) - parseInt(number2);
    12. }
    13. //def a object
    14. let blogger = {
    15. name: "Cyan_RA9",
    16. age: 21,
    17. write() {
    18. console.log("I relish writing blogs.")
    19. }
    20. }
    21. //export the data of this .js file out(导出模块)
    22. module.exports = {
    23. plus: plus,
    24. minus: minus,
    25. eValue: E,
    26. PIValue: PI
    27. }
    28. //若导出的名称和本身属性名一致,可以使用ES6新特性———对象简写:
    29. exports = {
    30. plus,
    31. minus,
    32. E,
    33. PI
    34. }

                    定义testCalculate.js,用来模拟需要导入其他模块的模块,在testCalculate.js中定义导入语句,导入calculate.js模块。
                    testCalculate.js代码如下 : 

    1. //import the data of other .js file in(导入模块)
    2. let calculate = require("./calculate"); //默认携带.js尾缀
    3. //亦可以通过解构赋值来导入模块中的部分数据
    4. let { plus } = require("./calculate");
    5. let { color } = require("./calculate");
    6. /*
    7. 导入模块后,通过"名称."的形式来调用,
    8. 类似于JS中对象的调用。
    9. */
    10. console.log(calculate.plus(11, 5));
    11. console.log(calculate.minus(11, 5));
    12. console.log(plus(11, 5));
    13. console.log(calculate.eValue);
    14. console.log(calculate.PIValue);
    15. console.log(color);
    16. /*
    17. 若IDEA没有报出语法错误,说明导入成功!
    18. 若导入模块失败,使用其他模块中的内容会报错———Missing require() statement
    19. */

    四、ES6新特性实现模块化编程

            1.介绍 : 

            ES6新特性实现模块化编程,在使用上和传统CommonJS原则一致,都是先写导出语句以导出模块,再写导入语句来导入模块。

            导出模块可以使用三种方式——
            (1) export {}; (2) export 定义名称 = ; (3) export default {};

            导入模块有对应的两种方式——
            (1) import {} from "__.js"; (2) import 名称 from "__.js"; [方式(2)主要用于对应第三种导出语句]

            PS : 

            1> ES6的模块化无法在Node.js中执行,需要用Babel转码ES5之后再执行。

            2> export可以导出一切JS变量,包括基本类型变量,函数,数组,对象等。

            2.实例 : 

                    另定义calculate_EX.js,用来模拟要使用的其他模块,需要在calculate_EX.js文件中定义导出语句。
                    calculate_EX.js代码如下 : 

    1. //define some variables and constants
    2. let symbol = "RA9";
    3. let color = "cyan";
    4. //The function used to calculate the sum of three numbers
    5. let plus = function (number1, number2, number3) {
    6. return parseInt(number1) + parseInt(number2) + parseInt(number3);
    7. }
    8. //The function used to calculate the difference of two numbers
    9. let minus = function (number1, number2) {
    10. return parseInt(number1) - parseInt(number2);
    11. }
    12. //def a object
    13. let blogger = {
    14. name: "Cyan_RA9",
    15. age: 21,
    16. write() {
    17. console.log("I relish writing blogs.")
    18. }
    19. }
    20. //(1)第一种导出方式———批量导出(可以全部导出,也可以部分导出)
    21. export {
    22. plus,
    23. minus,
    24. blogger,
    25. color
    26. }
    27. //(2)第二种导出方式———在定义时就直接导出(直接在定义语句前面加上export关键字)
    28. export let divide = function (number1, number2) {
    29. return number1 / number2;
    30. }
    31. //(3)第三种导出方式———default默认导出
    32. export default {
    33. multiply(number1, number2) {
    34. return number1 * number2;
    35. },
    36. symbol
    37. }

                    另定义testCalculate_EX.js,用来模拟需要导入其他模块的模块,在testCalculate_EX.js中定义导入语句,导入calculate_EX.js模块。
                    testCalculate_EX.js代码如下 : 

    1. //(1) 通过解构赋值的形式导入模块
    2. // [可以选择性的导入部分数据]
    3. // [要求导入和导出时的名称一致]
    4. import { blogger } from "./calculate_EX";
    5. console.log(blogger);
    6. //(1) 通过解构赋值的形式导入模块
    7. import {divide} from "./calculate_EX";
    8. console.log(divide(12, 3));
    9. //(2) 通过定义名称的形式导入模块(对应导出模块的default导出语句)
    10. //该方式可用于解决命名冲突问题
    11. import demoI from "./calculate_EX";
    12. console.log(demoI.symbol);
    13. console.log(demoI.multiply(11, 5));

            System.out.println("END-------------------------------------------------------------");

  • 相关阅读:
    使用hugging face开源库accelerate进行多GPU训练(单机多卡)时,在保存模型结构的时候出现的问题
    1593. 拆分字符串使唯一子字符串的数目最大
    Vue:从本地加载json文件
    【力扣周赛】第 363 场周赛(完全平方数和质因数分解)
    RDD缓存介绍_大数据培训
    统计学习方法 支持向量机(上)
    什么是分层架构
    [Git]IDEA集成Git
    Kotlin语法学习(一)
    简历模板百度网盘自取
  • 原文地址:https://blog.csdn.net/TYRA9/article/details/133965237