zoukankan      html  css  js  c++  java
  • CommonJS随记

    CommonJS的模块化

    Node应用由模块组成,每个模块有自己的作用域,里面的函数、变量、类等都是私有的。

    CommonJS规定,每个模块内部,module变量(是个对象)代表当前模块,module.exports是对外的接口。其他文件通过require方法加载这个接口,获得该模块输出的数据。

    CommonJS模块的特点:

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

    module对象

    Node内部提供一个Module构建函数,所有模块都是Module的实例;每个模块内部,都有一个Module对象代表当前模块,具有以下属性:

    • id --通常是带有绝对路径的模块文件名
    • filename -- 模块文件名
    • loaded -- Boolean,是否已完成加载
    • parent -- 调用该模块的模块对象
    • children --引用到的其他模块构成的数组
    • exports --模块对外输出的值

    require命令

    基本功能:读入并执行一个JavaScript文件,返回该模块的exports对象;如没有找到指定模块会报错;

    require加载文件后缀名默认为.js

    路径加载规则:

    • “/”开头 --绝对路径的模块文件;
    • “./”开头 -- 相对于当前执行脚本的模块所在目录的相对路径;
    • 不是“/”或“./”开头的路径,先找到第一个标识的位置,再以此为参数找到后续路径;
    • 如果指定的模块文件没有发现,Node会尝试为文件名添加.js,.json, .node后重新搜索,并按对应的文件类型解析;

    目录加载:require的参数字符串指向一个目录时,会自动查看该目录的package.json文件,然后加载main字段指定的入口文件;如果没有main字段或没有package.json文件,则会加载该目录下的index.jsindex.node文件。

    require命令加载重复的模块(根据绝对路径识别)实际上只执行一次,后面都是加载缓存;所有缓存都存放在require.cache中。删除模块的缓存可以写如下代码:

    //删除指定模块
    delete require.cache[moduleName];
    //删除所有模块
    Object.keys(require.cache).forEach(function(key) {
        delete require.cache[key];
    })
    

    加载机制

    CommonJS加载模块是加载其输出值的拷贝,加载之后不会受到源模块内部变化的影响。

    参考:CommonJS规范


    生如夏花般绚烂,死如秋叶般静美
  • 相关阅读:
    “指定的SAS安装数据(sid)文件不能用于选定的SAS软件订单
    windows下如何快速优雅的使用python的科学计算库?
    量化分析师的Python日记【第1天:谁来给我讲讲Python?】
    Python的lambda函数与排序
    使用python管理Cisco设备-乾颐堂
    python移除系统多余大文件-乾颐堂
    python算法
    python实现高效率的排列组合算法-乾颐堂
    使用python把图片存入数据库-乾颐堂
    Python将阿拉伯数字转化为中文大写-乾颐堂
  • 原文地址:https://www.cnblogs.com/muTing/p/9191544.html
Copyright © 2011-2022 走看看