• Modules


    一、循环模块

      1、当存在循环的require()调用时,一个模块可能在返回时并不会被执行。  //只在第一次调用时会执行

    二、核心模块

      1、Node中有一些模块是编译成二进制的。

      2、核心模块定义在node源代码的lib/目录下。

      3、require()总是会优先加载核心模块。例如,require('http')总是返回编译好的HTTP模块,而不管是否有这个名字的文件。

    三、文件模块

      1、如果按文件名没有查找到,那么node会添加 .js.json后缀名,再尝试加载,如果还是没有找到,最后会加上.node的后缀名再次尝试加载。

      2、.js 会被解析为Javascript纯文本文件,.json 会被解析为JSON格式的纯文本文件. .node 则会被解析为编译后的插件模块,由dlopen进行加载。

      3、模块加载的两种方式:

    • 使用绝对(/)或相对(./)路径的文件
    • 从node_modules文件夹加载

    四、从node_modules文件夹中加载

      1、如果require()中的模块名不是一个本地模块,也没有以'/', '../', 或是 './'开头,那么node会从当前模块的父目录开始,尝试在它的/node_modules文件夹里加载相应模块。

      2、需要配置package.json文件  //json文件说明

      3、如果位于'/home/ry/projects/foo.js'的文件调用了require('bar.js'),那么node查找的位置依次为:

    • /home/ry/projects/node_modules/bar.js
    • /home/ry/node_modules/bar.js
    • /home/node_modules/bar.js
    • /node_modules/bar.js

         注:这就要求程序员应尽量把依赖放在就近的位置,以防崩溃。

    五、模块缓存

      1、模块在第一次加载后会被缓存。这意味着每次调用require('foo')的时候都会返回同一个对象。

      

      2、模块的缓存是依赖于解析后的文件名。由于随着调用的位置不同,可能解析到不同的文件(比如需从node_modules文件夹加载的情况),所以,如果解析到其他文件时,就不能保证require('foo')总是会返回确切的同一对象。

    六、其他

      1、require() 返回 module.exports,并且 module 是一个典型的只能在特定模块作用域内有效的变量,如果要使用它,就必须明确的导出。

      2、module.id:用于区别模块的标识符。通常是完全解析后的文件名。

      3、module.filename:模块完全解析后的文件名。

      4、module.loaded:module的加载状态。

      5、module.parent:引入该模块的模块.

      6、module.children:这个模块引入的所有模块对象。

      7、为了获取调用 require 加载的确切的文件名,使用 require.resolve() 函数。

      8、当 Node 直接运行一个文件时,require.main 就被设置为它的 module

      

      9、模块包的目录结构、依赖关系等(NPM)

    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    融云技术分享:全面揭秘亿级IM消息的可靠投递机制
    企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
    喜马拉雅亿级用户量的离线消息推送系统架构设计实践
    uni-app 项目使用 npm 包中的小程序自定义组件
    Leetcode563. 二叉树的坡度
    vue看源码遇到 报错
    windows使用
    mysql 显示行号
    从优秀到卓越
    【面经】阿里蚂蚁金服22秋招-Java后端
  • 原文地址:https://www.cnblogs.com/realsoul/p/5614009.html
Copyright © 2020-2023  润新知