node.js中require加载规则是什么,如何实现

Admin 2022-06-15 群英技术资讯 325 次浏览

今天这篇我们来学习和了解“node.js中require加载规则是什么,如何实现”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“node.js中require加载规则是什么,如何实现”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!



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 被加载了')

结果:

可以看出: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

到此这篇关于详解在node.js中require方法的加载规则的文章就介绍到这了,更多相关node.js require方法加载规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • Node.js中的require.resolve方法使用简介
  • 简单模拟node.js中require的加载机制
  • node.js require() 源码解读
  • node.js中的require使用详解
  • node.js使用require()函数加载模块
  • Node.js中require的工作原理浅析

到此这篇关于“node.js中require加载规则是什么,如何实现”的文章就介绍到这了,更多相关node.js中require加载规则是什么,如何实现内容,欢迎关注群英网络技术资讯频道,小编将为大家输出更多高质量的实用文章! 群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服