什么是require?

  -Node使用CommonJS模块规范,内置require函数用于加载模块文件

  -require的基本功能是>读入并执行一个javascript文件,然后返回该模块的exports对象

  -若没有发现指定模块,则报错

自己实现require函数

  -定义模块

  

  -实现

  

  注释

  

rquire扩展名

  --require加载文件时可以省略扩展名

require加载文件规则

  -通过 ./ 或者 ../ 开头

    --按照相对路径从当前文件所在文件夹开始寻找模块

  -通过 / 开头

    --以系统根目录开始寻找模块

  -不以 ./ 或 / 开头,分为两种情况

    --表示加载的是一个默认提供的核心模块> 位于Node的系统安装目录中

    --从当前目录向上搜索node_modules目录中的文件

        ---如果自己定义一个模块在node_modules目录中,而加载时不以 ./ 或 / 开头,直接以文件名加载,无论node_modules在什么位置,都可以被加载到,因为当加载时会一直向上去找,一直到找不到为止,此加载符合就近原则

  -模块名称重复,系统模块的优先级别最高

require不仅可以载入js模块,也可以载入JSON对象

  -加载json文件,大部分用于读取配置信息

  -require也可以加载文件夹,加载文件夹分为两种情况

    --若文件夹中不存在package.json,直接加载文件夹内的index.js文件

    --若package.json文件存在,则根据配置问价信息加载

模块的缓存

  -第一次加载某个缓存时,Node会缓存该模块,以后再加载该模块,就直接从缓存取出该模块的module.exports属性(不会再执行该模块)

  -如果需要多次执行模块中的代码,一般可以让模块暴漏行为(函数)

  -模块的缓存可以通过require.cache拿到,同样也可以删除

间的的测试缓存

  -模块

    --module.exports = new Date();

  -文件

    

  执行文件可以看到,得到的毫秒是不变的,说明已经缓存。

清空缓存

  -在加载模块之前进行缓存的清楚

  

  -什么时候需要清楚缓存?

    --由于可以加载json数据,所以每次数据更新时,需要同步更新json数据,此时就需要清除缓存,一般都是对数据做清除缓存操作

如果不需要缓存,可以将暴漏的属性改为暴漏方法(行为),因为暴漏的方法在每一次加载的时候都会执行,从而不会进行缓存。

require、缓存的更多相关文章

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

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

  2. 关于 require的缓存

    有两个文件 a.js内容如下: var add = require("./t.js").add; var add2 = require("./t.js").ad ...

  3. Node.js精进(1)——模块化

    模块化是一种将软件功能抽离成独立.可交互的软件设计技术,能促进大型应用程序和系统的构建. Node.js内置了两种模块系统,分别是默认的CommonJS模块和浏览器所支持的ECMAScript模块. ...

  4. html中require.config 缓存问题

    在html中,require的官方基本用法如下: <!DOCTYPE html> <html> <head> <title>My Sample Proj ...

  5. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

  6. 作为前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  7. require() 源码解读

    2009年,Node.js 项目诞生,所有模块一律为 CommonJS 格式. 时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS ...

  8. 使用gulp解决RequireJS项目前端缓存问题(一)

    1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...

  9. django 缓存、中间件、信号、CSRF 详解

    中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...

随机推荐

  1. H5学习之旅-H5的新特性(1)

    随着H5的发展,网页开发呈现了跨平台的特性,目前H5是兼容各大平台的,这也为一些其他的技术的跨平台开发提供了基础,所以我预测后H5会成为很重要的开发语言 新特性介绍 1.用于回话的canvas标签 2 ...

  2. OC利用ijkplayer框架按照步骤集成实现电视直播

    一. 下载ijkplayer ijkplayer下载地址:https://github.com/Bilibili/ijkplayer 下载完成后解压, 解压后文件夹内部目录如下图: ijkplayer ...

  3. How to SetUp The Receiving Transaction Manager

    In this Document   Goal   Solution   References APPLIES TO: Oracle Inventory Management - Version: 1 ...

  4. Errors running builder 'Integrated External Tool Builder' on project xxx

    出现这样的提示,表明你的项目的Builder项出了问题. 解决方法是: 右键项目选择"Properties",再选择"Builders",删除丢失的builde ...

  5. Dynamics CRM 请求服务时报access is denied错误

    在javascript脚本里使用ODATA向组织服务发请求时报错,请求被拒绝了,后经人点拨得知是脚本跨域的问题,原因如下:访问系统我用的是IP地址,但通过 Xrm.Page.context. cont ...

  6. 一个 developer 的进化

    作为一名开发者已十年,回顾过往大概经历了这么几个阶段,如下图所示: Develop Code 作为刚走出学校的学生进入公司,在最初的 1-2 年内就处于该阶段. 不停的开发代码,为系统的大厦添砖加瓦, ...

  7. 对FMDB的封装JRDB

    在自己开发中,每次用到数据库都会纠结是使用CoreData还是FMDB.CoreData虽然Api简单,但是调用栈非常复杂,要初始化一个Context需要至少20行代码.显然,对于这种这么恶心的情况, ...

  8. java数据类型易错点简单总结,欢迎大神前辈补充!谢谢

    数据类型那这边看似简单,花了我很长时间也就是才练到几成"功力"吧.还希望路过的大神在下面补充,菜鸟的我深受感谢! 首先看两个思考题 思考题1:请问下面这个有没有问题 double ...

  9. ADF BC New Features

      Examining ADF Business Components New Features Purpose In this tutorial, you create a series of si ...

  10. 基于ARM-contexA9-蜂鸣器pwm驱动开发

    上次,我们写过一个蜂鸣器叫的程序,但是那个程序仅仅只是驱动蜂鸣器,用电平1和0来驱动而已,跟驱动LED其实没什么两样.我们先来回顾一下蜂鸣器的硬件还有相关的寄存器吧: 还是和以前一样的步骤: 1.看电 ...