美文网首页程序员
nodejs模块加载

nodejs模块加载

作者: wuww | 来源:发表于2017-05-03 00:30 被阅读84次

使用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为当前文件的绝对路径

相关文章

  • nodejs模块加载

    使用nodejs也有很长一段的时间了,但却感觉自己并没有太多的积累。有时候会问自己,“你学了这么久了,比起初学者你...

  • JS 模块化方案对比

    1. CommonJS 规范(同步加载 NodeJS) 2. AMD(异步加载模块 requireJS) 采用异步...

  • 22Module语法

    概述 CommonJS 是服务器模块加载规范,AMD 是浏览器模块加载规范 前者,nodejs中require和m...

  • NodeJS模块加载机制

    在NodeJS中一个文件就是一个模块,每个模块都有自己的作用域 全局变量 __filename:当前文件被解析过后...

  • nodejs模块加载机制

    nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找...

  • NodeJS:模块加载原理

    模块的工作原理 实现“模块”功能的奥妙就在于JavaScript是一种函数式编程语言,它支持闭包。如果我们把一段J...

  • nodejs模块加载机制

    不同于传统js通过标签引入的方式加载进页面,node通过require方法加载文件,或者说是模块,在node中一个...

  • Nodejs模块加载流程

    直接上图 参考文献:require() 源码解读[http://www.ruanyifeng.com/blog/2...

  • 模块规范(CommonJS、AMD、CMD)

    CommonJS规范 应用于服务端,模块同步加载 — nodejs/webpack; 引用:require(mod...

  • koa加载解析记录

    1、nodejs下的require, 一切node模块的加载都是从node_modules开始的,打开koa模块p...

网友评论

    本文标题:nodejs模块加载

    本文链接:https://www.haomeiwen.com/subject/thbhtxtx.html