nodejs模块加载

使用nodejs也有很长一段的时间了,但却感觉自己并没有太多的积累。有时候会问自己,“你学了这么久了,比起初学者你强在哪呢?”
或许只是几个常用的API调用的更熟练一些吧。学习的路上还是要脚踏实地,稳步前进。

nodejs中,加载一个模块通过require()方法,例如require('fs')。这个方法接受模块的标识符,可以加载的模块分为3种:

  • node提供的核心模块。
  • 路径形式的文件模块
  • 自定义模块

核心模块在node源代码的编译过程中已经编译为二进制代码,加载速度最快。加载文件模块时,标识符是一个可以省略文件后缀名的文件路径。node根据标识符中的路径查找文件,如果文件后缀名省略,node会依次尝试.js, .json, .node,每一种后缀名都对应一种不同的加载方式。通过require.extensions可以看到已有的文件加载方式,也可以自定义指定格式的加载方式。比如下面的代码定义了.txt文件的加载方式。

require.extensions['.txt'] = function (module, filename) {
  var fs = require('fs')
  var res = fs.readFileSync(filename)
  module.exports = res.toString()
}

加载自定义模块的标识符与核心模块的类似,不过核心模块具有更高的优先级。所以自定义模块不能与核心模块重名。在加载自定义模块时,会依次查找当前目录下的node_modules,父目录下的node_modules,……,根目录下的node_modules。通过module.paths查看所有需要查找的路径。

require()不仅可以加载文件,还可以加载一个包,即通过标识符查找到的是一个目录。它会加载该目录下package.jsonmain指定的文件。如果加载失败,则继续查找目录下的index,即index.js, index.json, index.node

被加载后的文件会被缓存,再次加载时文件不会再次执行,而是从缓存中读取。已经缓存的文件可以通过require.cache查看。也可以在此处删除缓存。

在加载模块时,node会向模块提供几个变量,exports, module, require, __dirname, __filename。其中exports, module, require为模块提供加载模块,导出内容的功能,__dirname为当前文件所在目录的绝对路径,__filename为当前文件的绝对路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找...
    前端大魔王阅读 884评论 1 2
  • nodejs 模块机制 简单模块定义和使用 在Node.js中,定义一个模块十分方便。我们以计算圆形的面积和周长两...
    艾伦先生阅读 1,040评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • 今天的文章来自上午办公室的闲聊,源于一位特别有思想的同事! 要我说啊!人生如戏,不是演戏的戏,是游戏的戏!他一边站...
    D071_武汉_夏至幸阅读 186评论 0 1
  • 这个盛夏,说是重回母校,却也不是真正回到母校。关于我大学的回忆,基本都是停留在西环南路89号,而不是现在的滨海大...
    奈媞阅读 264评论 1 1