详解在node.js中require方法的加载规则

作者:@必意玲 时间:2024-05-08 09:36:10 

require 方法的加载规则

  1. 优先从缓存中加载

  2. 核心模块

  3. 路径形式的模块

  4. 第三方模块

一、优先从缓存中加载

main.js:执行加载a.js模块


require('./a')

a.js:执行加载b.js模块,并输出a被加载了


require('./b')
console.log('a.js 被加载了')

b.js:输出b被加载了


console.log('b.js 被加载了')

结果:

详解在node.js中require方法的加载规则

可以看出:main去加载a.js,然后a在去加载b.js过程中,并没有打印两次 a.js被加载,Node会直接从require.cache中根据传入的id,取出该对象的exports值,不会再次执行该模块代码。

二、核心模块

核心模块的本质也是文件,核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了。如:

  • require(‘fs')

  • require(‘http')

三、路径形式的模块

我们说的路径形式的模块,其实就是加载自己写的JS文件,有四种方式可以加载


var fooExports = require('./index')//相对路径,常用
var fooExports = require('../index')//相对路径,常用
var fooExports = require('/index')//根目录,不常用
var fooExports = require('D:/demo/index')//根目录,不常用

四、第三方模块

  1. 凡是用到第三方模块,都必须通过 npm 来下载

  2. 使用的时候就可以通过 require(‘包名') 的方式来进行加载才可以使用

  3. 不可能有任何一个第三方包和核心模块的名字是一样的

既不是核心模块、也不是路径形式的模块,就是第三方模块。加载方式如下

以 var template = require(‘art-template') 为例:

  • 先找到当前文件所处目录中的 node_modules 目录

  • 然后根据以下方式找到文件中的 main 属性

  • main 属性中就记录了 art-template 的入口模块

  • 然后加载使用这个第三方包,但是实际上最终加载的还是文件

  • 如果 package.json 文件不存在或者 main 指定的入口模块是也没有

  • 则 node 会自动找该目录下的 index.js,也就是说 index.js 会作为一个默认备选项

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

  • 如果上一级还没有,则继续往上上一级查找

  • 如果直到当前磁盘根目录还找不到,最后报错: can not find module xxx

第三方模块寻找顺序:  node_modules/art-template  >    package.json 文件   >   main 属性 >   index.js

来源:https://blog.csdn.net/qq_36410795/article/details/86484286

标签:node.js,require,加载规则
0
投稿

猜你喜欢

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    2024-01-18 09:48:04
  • Python中的Numpy矩阵操作

    2021-10-06 07:19:23
  • Python学习思维导图(必看篇)

    2021-03-19 02:13:13
  • python实现简单名片管理系统

    2023-06-13 08:03:12
  • 基于python SMTP实现自动发送邮件教程解析

    2023-03-08 20:15:02
  • DTS构建组件及其如何完成数据转换服务

    2009-01-20 15:37:00
  • Pytorch 之修改Tensor部分值方式

    2023-04-11 06:45:12
  • 详解Spring Security怎么从数据库加载我们的用户

    2024-01-21 18:35:37
  • 实例讲解MySQL统计库表大小

    2024-01-19 09:21:53
  • 新手必备之MySQL msi版本下载安装图文详细教程

    2024-01-26 04:04:05
  • python中pandas库中DataFrame对行和列的操作使用方法示例

    2022-07-05 03:09:00
  • 浅谈MySQL存储引擎选择 InnoDB还是MyISAM

    2009-05-10 20:02:00
  • 设置密码保护的SqlServer数据库备份文件与恢复文件的方法

    2024-01-15 10:19:55
  • PHP生成sitemap.xml地图函数

    2024-06-05 09:23:16
  • mysql 5.7.18 winx64 免安装 配置方法

    2024-01-27 14:00:08
  • Django查询优化及ajax编码格式原理解析

    2021-04-26 02:04:27
  • go程序测试CPU占用率统计ps vs top两种不同方式对比

    2024-05-05 09:27:04
  • SQL Server数据库导入MySQL数据库体验

    2009-01-20 16:07:00
  • 采用XML数据来填充ASP表单

    2008-05-04 13:32:00
  • python使用Random随机生成列表的方法实例

    2021-08-12 12:08:54
  • asp之家 网络编程 m.aspxhome.com