• Node学习笔记之模块化


    一、介绍

    1.1 什么是模块化与模块 ?

    将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化

    其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他 模块使用

    1.2 什么是模块化项目 ?

    编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目

    1.3 模块化好处

    下面是模块化的一些好处:

    1. 防止命名冲突

    2. 高复用性

    3. 高维护性

    1.4模块化使用

    导出数据方式一:

    1. exports.num = num;
    2. exports.sum = sum;
    3. exports.Animal = Animal;

    导出数据方式二:

    1. // 通过module.exports 等于一个对象,来导出数据
    2. // 对象可采用es6简化对象的写法
    3. module.exports = {
    4. num,
    5. sum,
    6. Animal
    7. };

    导入数据:

    1. // 注意1: 如果要使用某个模块里面的数据,则需要使用 require 关键字进行导入。
    2. // 注意2:在导入用户自己开发的模块的时候,需要加上路径(1. 相对路径(多) 2. 绝对路径) 注意: ./ 必须写上
    3. // 注意3:模块文件的扩展名(后缀名)可以写,也可以不写
    4. // 注意4:导出的模块一般需要使用一个变量来接收,一般把接收的量定义为常量
    5. // 注意5: 定义常量的名称和文件的名称保持一致(这个不是必须,大家都这么做)
    6. const m1 = require("./modules/m1.js");

    完整代码:

    1. // m1.js中:
    2. let num = 10;
    3. function sum(a, b) {
    4. return a+b
    5. }
    6. class Animal{
    7. constructor(){
    8. this.age=0
    9. }
    10. }
    11. // 导出数据方式1:
    12. // exports.num = num;
    13. // exports.sum = sum;
    14. // exports.Animal = Animal;
    15. // 导出数据方式2:
    16. // 通过module.exports 等于一个对象,来导出数据
    17. // 对象可采用es6简化对象的写法
    18. module.exports = {
    19. num,
    20. sum,
    21. Animal
    22. };

    模块的使用

    1. //01-模块的使用.js
    2. const m1 = require("./modules/m1.js");
    3. console.log(m1); //{ num: 10, sum: [Function: sum], Animal: [Function: Animal] }
    4. console.log(m1.sum(10, 20));
    5. const obj = new m1.Animal(); //30
    6. console.log(obj.age); //0

    二、模块里面this的指向问题

    exports实际上是module.exports的引用,

    在 nodejs 里面的 this 代表当前的这个模块,也就是 exports 对象

    1. console.log(exports); //{}
    2. console.log(module.exports); //{}
    3. console.log(exports === module.exports); //true exports实际上是module.exports的引用
    4. console.log('this', this); // this {}
    5. console.log(this === exports);// true // 在 nodejs 里面的 this 代表当前的这个模块,也就是 exports 对象 并且,交互模式下,没有exports这个对象
    6. console.log(global === this ); //false this不指向全局对象


    三、CommonJS 规范

    module.exports 、 exports以及require 这些都是CommonJS模块化规范中的内容。 而 Node.js 是实现了 CommonJS 模块化规范,二者关系有点像 JavaScript 与 ECMAScript

    CommonJS 规定:

    ① 每个模块内部,module 变量代表当前模块。

    ② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。

    ③ 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。

  • 相关阅读:
    C++:继承、继承对象模型、多继承、菱形继承 、虚继承的实现
    Qt 表格导出数据为 excel html csv
    LuatOS-SOC接口文档(air780E)--lora - lora驱动模块
    实用的文字转语音免费软件推荐
    想知道如何图片转文字?这几个方法你别错过
    math_等比数列求和推导&等幂和差推导/两个n次方数之差/
    对于直流电线缆的选型,你真的会吗?—直流电线缆选型规范
    ODrive移植keil(八)—— 闭环控制
    基于android选课系统的设计与实现
    阿里笔试题目——网络
  • 原文地址:https://blog.csdn.net/m0_52704461/article/details/133979328