NodeJS之require模块加载机制

require都是模块化编程的诞生物,是 AMD规范引入方式,提供了服务器/浏览器的模块加载方案。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。require加载模块可分为下面三种情况:

  1. 加载核心模块

    核心模块默认已经被封装编译到二进制文件中了,直接使用加载就行;

    例如require('fs')require('http')

  2. 加载本地模块(自己写的模块)

    必须以路径的形式加载,否则node会把他当成是核心模块或者第三方模块加载,文件后缀.js可以忽略。

    例如:require('./a.js')require('../b.js')

  3. 加载第三方模块(通过npm下载安装的模块)

    为什么第三方模块不会和核心模块加载冲突?

    因为不可能有第三方模块名会和核心模块名一样(规定)

    模块加载原理?

    1. require('模块名')后,例如require('esprima')

    2. 先找到当前文件目录所在的node_module文件夹

    3. 找到node_module文件夹中对应加载模块名的文件夹,例如node_modules/esprima

    4. 找到node_modules/esprima/package.json文件

    5. node_modules/esprima/package.json文件的main属性(main属性记录了esprima的入口模块)

    6. 加载使用这个第三方包(即最终加载的还是js文件)

    7. 如果package.json文件不存在或者main指定的入口模块是也没有则 node会自动找目录下的index.js
      也就是说 index.js会作为一个默认备选项

    8. 如果以上所有,任何一个条件都不成立,则会进入上一级目录中的node_module目录查找

    9. 如果上一级还没有,则继续往上一级 直到当前磁盘根目录还找不到,最后报错

参考:

https://blog.csdn.net/cangqiong_xiamen/article/details/102832604

https://www.freesion.com/article/27031156344/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值