假设Y是路径,X是文件名或目录名,当 Nodejs 遇到 require(Y+X) 时,按照下面的顺序处理:

  1、如果 X 是核心模块(例如:require("http"))

  a.返回该模块

  b.不再继续执行

  2、如果Y是以“./”、“/”或“../”开头

  a.优先从缓存中加载

  b.把X当成文件,从指定路径开始,依次查找下面文件:X、X.js、X.json、X.node,只要其中一个存在,就返回该文件,不再继续执行

  c..把X当成目录,从指定路径开始,依次查找下面文件:X/package.json(main字段)、X/index.js、X/index.json、X/index.node,只要其中一个存在,就返回该文件,不再继续执行

  3.如果 X 不是核心模块,也没有以“./”、“/”或“../”开头,则Nodejs会从当前模块的父目录开始,尝试从它的 /node_module 目录里加载模块,如果还是没有找到,则移动到再上一层父目录,直到文件系统的根目录

  4.抛出“not found”

注意:require第一步是从缓存中加载某个模块,此时就算你更新了目标模块的内容,我们实际加载到的内存中的内容是不变的!!!!!!!!

//modelJs.js
console.log("modelJs被加载了");
var name="miyue";
//requireJs.js
setInterval(function () {
var modelJs=require("./modelJs");
console.log(modelJs.name);//miyue
},10000)

NodejS---require的机制的更多相关文章

  1. Nodejs的模块系统以及require的机制

    一.简介 Nodejs 有一个简单的模块加载系统.在 Nodejs 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),这个文件可能是 JavaScript 代码,JSON 或者编译过的C/C ...

  2. [one day one question] nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  3. 利用nodejs模块缓存机制创建“全局变量”

    在<深入浅出nodejs>有这样一段(有部分增减): 1.nodejs引入模块分四个步骤 路径分析 文件定位 编译执行 加入内存 2.核心模块部分在node源代码的编译过程中就编译成了二级 ...

  4. EventEmitter:nodeJs事件触发机制

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.r ...

  5. nodejs require//////////z

    背景 这篇文基本都是反对的,反对的很有道理,不是说我这篇文章的内容错误,因为这篇文章是我在健身房学习node的时候写的,这些知识都很粗糙,后来发现官方的稳定更详细:地址:http://nodejs.o ...

  6. nodejs require

    The rules of where require finds the files can be a little complex, but a simple rule of thumb is th ...

  7. 浅谈NodeJs的模块机制

    J历史 我们都知道,js在刚被创建的时候,只是为了在网页上写一些小脚本而已,比如网页特效,表单验证等等,创立者也许没觉悟到以后的js会发展到如此规模.这是web1.0时代. 在web 2.0时代,各种 ...

  8. NodeJS require路径

    项目需要用nodejs,感觉nodejs是前端装逼神器了,是通向全栈工程师的必经之路哇,接下来开始踏上学习nodejs的征程.下面是第一个hello,world的程序. 1.server.js文件,这 ...

  9. nodejs -- require , exports , module

    1. require , exports . -------------------------- 文件: 1) index.js //两种方式都可以: var forExports = requir ...

  10. 初探nodejs事件循环机制event loop

    nodejs的特点 nodejs 具有事件驱动和非阻塞I/O的特点. 事件驱动是指nodejs把每一个任务当成事件来处理. 非阻塞I/O是指nodejs遇到I/O任务时,会从线程池调度单独的线程处理I ...

随机推荐

  1. Change :hover CSS properties with JavaScript

    I need to find a way to change CSS :hover properties using JavaScript. For example, suppose I have t ...

  2. QOpenGLWidget

    QOpenGLWidget描述 QOpenGLWidget类是用于渲染OpenGL图形. 除了可以选择使用QPainter和标准的OpenGL渲染图形,QOpenGLWidget类提供了在Qt应用程序 ...

  3. 第八章 watch监听 84 watch-监视路由地址的改变

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. Ubuntu各个版本下载

    官网:https://www.ubuntu.com/download/desktop 没找到历史版本,且下载速度很慢 在网易镜像站下载ubuntu: 网址:http://mirrors.163.com ...

  5. (六)监控磁盘IO

    (1)被监控端配置 #vi /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters= UserParameter=custom.vfs.dev.read ...

  6. gtid 1032错误案例

    gtid 1032错误案例 大致背景: 分别在主从上删除了系统冗余账号. mysql> delete from mysql.user where host='::1';Query OK, 1 r ...

  7. jmeter-请求头需要URIEncode编译时

    使用函数 ${__urldecode()} 例如 :${__urldecode(%E4%BB%93%E5%BA%93)}${__urldecode(${参数变量})}

  8. JavaScript赋值运算符

    赋值运算符 ⑴     "="  赋值符号 可以将符号右侧的值赋值给符号左侧的变量 ⑵   "+="  加等于,是一个运算符 不要分开写 a += 5   等价 ...

  9. 与word、excel交互问题总结

    不同版本的Office对应的型号不同,往往问题出现在注册表中有多个版本,所以程序运行经常提示错误. 1.找不到引用microsoft.office.core解决办法 (引用中有感叹号,说明引用不成功) ...

  10. 【Python之路】特别篇--Bottle

    Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. Bottle框架大致可以分为以下部分 ...