详解在node.js中require方法的加载规则
作者:@必意玲 发布时间:2024-05-08 09:36:10
require 方法的加载规则
优先从缓存中加载
核心模块
路径形式的模块
第三方模块
一、优先从缓存中加载
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')//根目录,不常用
四、第三方模块
凡是用到第三方模块,都必须通过 npm 来下载
使用的时候就可以通过 require(‘包名') 的方式来进行加载才可以使用
不可能有任何一个第三方包和核心模块的名字是一样的
既不是核心模块、也不是路径形式的模块,就是第三方模块。加载方式如下
以 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
猜你喜欢
- 本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- # A
- 本文实例为大家分享了python os模块在系统管理中的应用代码,供大家参考,具体内容如下#临时文件import tempfile temp
- 导入CSV文件导入数据的步骤 ①打开xxx.csv文件②首先读取文件头③然后读取剩余头④当发生错误时抛出异常读取完所有内容后,打印文件头和剩
- 本文实例讲解了4种JavaScript实现简单tab选项卡切换的方法,分享给大家供大家参考,具体内容如下效果图: 方法一:for循
- 本文实例分析了thinkphp的四种url访问方式。分享给大家供大家参考。具体分析如下:一、什么是MVC thinkphp的MV
- 1、从外部文档中粘贴时,如果不想要其格式,只要文字,可以使用“Edit->paste as text”命令,而不要直接Ctrl+V。2
- 前言最近由于项目需要,需要读取一个含有中文的txt文档,完了还要保存文件。文档之前是由base64编码,导致所有汉字读取显示乱码。项目组把b
- 1. 匿名函数匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programmin
- 本文实例讲述了Python tkinter模块中类继承的三种方式。分享给大家供大家参考,具体如下:tkinter class继承有三种方式。
- 使用QMoive方法实现导入库文件from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.
- 一、Less/Scss变量换肤具体实现:1、初始化vue项目2、安装插件:npm install style-resources-loade
- 介绍一下,如何在php程序中运行Python脚本,在php中python程序的运行,主要依靠 程序执行函数,这里说一下三个相关函数:exec
- 将Excel中的数据导入到Access中,前提是在Access中的表已经建好。 dim conn dim co
- 现如今,各个国家交流密切,通过翻译使我们打破了语言壁垒,而翻译在互联网上的存在也尤为普遍。python中执行翻译操作的包是translate
- 本文实例讲述了php数组索引与键值操作技巧。分享给大家供大家参考。具体如下:<?php $array = array("a&
- 格式化字符串由占位符和普通字符组合而成。占位符由'%'打头,动词结尾。占位符由五类元素组成: 标志位(flag),宽度,精度
- 约定:import pandas as pdimport numpy as npfrom numpy import nan as NaN填充
- 对比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制。由于 Session 是以
- 将数字转换成大写的人民币,方法有很多,本例介绍的是使用js来完成的,看看下面的实现代码function changeNumMoneyToCh
- 定义一个什么都不做的函数>>> def a():... pass...>>> def printHell