• [NodeJS]Node模块笔记


    Module 模块

    模块的出现只是为了更好的维护代码避免全局污染提高代码可读性

    模块的加载与导出

    通过如下两种方式可以加载一个模块,通常返回一个对象或者方法

    require(modulePath)
    module.require(modulePath)
    

    而一个模块的内部作用域内存在exports对象,通过该对象可以导出对象、方法或变量。

    exports
    module.exports
    

    本质上内部有一行隐藏代码exports === module.exports所以不要轻易给exports重新赋值

    模块的加载顺序

    模块加载顺序如下

    $NODE_PATH
    ./node_modules
    $HOME/.node_modules
    $HOME/.node_libraries
    $PREFIX/lib/node
    

    其实可以通过require.resolve.paths(moduleName)来获取描述模块加载顺序的数组

    模块内容

    模块除了导入和导出之外,还可以通过require.resolve(moduleName)方法来获取模块的完整路径
    在每个模块中都存在module对象用来表示模块的信息,但是仅限于当前模块作用域内:

    id: 模块唯一标识符,通常就是模块的完整路径,入口文件除外,入口文件的id为'.'
    filename: 模块完整路径
    parent: 加载了该模块的父类模块
    exports: 模块导出内容
    loaded: 是否被其他模块加载过
    children: 模块内加载的其他模块
    paths: 模块的加载顺序
    

    模块的缓存

    一个模块一旦被加载就会被缓存起来,也就是多次加载只会返回同一个对象,同时一个模块内加载的所有模块都存储在require.cache这个对象中。这个对象以模块完整路径为Key,以模块内容为value
    如果希望删除缓存,使用delete即可

    delete require.cache(require.resolve(moduleName))
    

    模块名

    默认情况下,一个文件就是一个模块,所以require(filePath)即可加载一个模块。但是有时候也可以通过一个目录来加载一个模块,此时可以在该目录下的package.json文件中定义main字段指定模块的入口文件。如果不指定则默认加载目录下的index.js文件。

    API清单

    1. module
    module.id
    module.filename
    module.children
    module.parent
    module.exports
    module.loaded
    module.paths
    module.require(moduleName: string)
    
    2. require
    require(moduleName: string)
    require.resolve(moduleName: string)
    require.resolve.paths(moduleName: string)
    
    3. exports
    exports == module.exports
    
  • 相关阅读:
    Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
    IP地址资源的分配和管理
    破解中常见的指令及修改
    8086 CPU 寻址方式
    汇编指令速查
    关于ida pro的插件keypatch
    动态方式破解apk进阶篇(IDA调试so源码)
    IDA7.0安装keypatch和findcrypt-yara插件
    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
    IDA动态调试技术及Dump内存
  • 原文地址:https://www.cnblogs.com/joyjoe/p/10239687.html
Copyright © 2020-2023  润新知