• Node之CommonJS,为什么模块该这么写


    2020.11.14

    CommonJS规范

    Node应用由模块组成,采用CommonJS模板规范

    每个文件就是一个模块,有自己的作用域。在一个文件里定义的数量、函数、类,都是私有的,对其他文件不可见

    用 global 对象定义的属性可以在多个文件分享变量。

    CommonJS规范规定,在每个模块内部,module变量代表当前模块,这个变量是一个对象,exports就是一个对外的接口,加载模块的时候其实也就是加载这个模块的属性。

    特点:

    • 所有的代码都运行在模块的作用域,不会污染全局作用域
    • 模块可以被多次加载,但是只会在第一次加载的时候运行,然后结果就被缓存了,再次加载就是读取缓存中的内容了
    • 模块加载的顺序,是按照其在代码中的出现的顺序加载的

    关于module对象

    就是node内部提供的一个Module构建函数,所有模块都是Module的实例

    module.id 模块的识别符,通常是带有绝对路径的模块文件名。
    module.filename 模块的文件名,带有绝对路径。
    module.loaded 返回一个布尔值,表示模块是否已经完成加载。
    module.parent 返回一个对象,表示调用该模块的模块。
    module.children 返回一个数组,表示该模块要用到的其他模块。
    module.exports 表示模块对外输出的值。
    

    module.exports

    表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量

    exports变量

    每个模块都会有一个exports变量,指向module.exports。

    • CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
    • AMD规范则是非同步加载模块,允许指定回调函数。

    require命令

    请求module.exports抛出来的对象,也就是说用于接收对应的对象。require的模块参数命名需要符合小驼峰命名的字符串或者是以 . … 开头得相对路径,一般来说使用相对路径

    • 加载文件时,后缀名默认为 .js ,
    • 其中/开头表示的时绝对路径, ./ 开头的就是相对路径
    • 如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块

    目录加载规则

    在packjson文件中,会有入口文件,也就是说文件就是从这个地方进去的

    大致CommonJS的内容就是这些了,也算是一些比较常用的吧

  • 相关阅读:
    变量使用的注意事项
    计算机存储单元
    常量
    mybatis报错There is no getter for property named '***' in 'class ***'
    sonar-scanner扫描各种出错解决
    SonarQube搭建的各种问题
    linux每日命令(18):whereis命令
    Django视图层之路由配置系统(urls)
    Django---MTV模型、基本命令、简单配置
    web框架
  • 原文地址:https://www.cnblogs.com/Indomite/p/14195242.html
Copyright © 2020-2023  润新知