Node.js模块系统为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。//-------------------------------------hello.jsexports.world = function() {console.log('Hello World');}main.jsvar hello = require('./hello');hello.world();对象封装到模块中//hello.jsfunction Hello() {var name;this.setName = function(thyName) {name = thyName;};this.sayHello = function() {console.log('Hello ' + name);};};module.exports = Hello;//main.jsvar Hello = require('./hello');hello = new Hello();hello.setName('BYVoid');hello.sayHello();//-----------------------------------

调用查找顺序

在路径 Y 下执行 require(X) 语句执行顺序1. 如果 X 是内置模块a. 返回内置模块b. 停止执行2. 如果 X 以 '/' 开头a. 设置 Y 为文件根路径3. 如果 X 以 './' 或 '/' or '../' 开头a. LOAD_AS_FILE(Y + X)b. LOAD_AS_DIRECTORY(Y + X)4. LOAD_NODE_MODULES(X, dirname(Y))5. 抛出异常 "not found"LOAD_AS_FILE(X)1. 如果 X 是一个文件, 将 X 作为 JavaScript 文本载入并停止执行。2. 如果 X.js 是一个文件, 将 X.js 作为 JavaScript 文本载入并停止执行。3. 如果 X.json 是一个文件, 解析 X.json 为 JavaScript 对象并停止执行。4. 如果 X.node 是一个文件, 将 X.node 作为二进制插件载入并停止执行。LOAD_INDEX(X)1. 如果 X/index.js 是一个文件,  将 X/index.js 作为 JavaScript 文本载入并停止执行。2. 如果 X/index.json 是一个文件, 解析 X/index.json 为 JavaScript 对象并停止执行。3. 如果 X/index.node 是一个文件,  将 X/index.node 作为二进制插件载入并停止执行。LOAD_AS_DIRECTORY(X)1. 如果 X/package.json 是一个文件,a. 解析 X/package.json, 并查找 "main" 字段。b. let M = X + (json main 字段)c. LOAD_AS_FILE(M)d. LOAD_INDEX(M)2. LOAD_INDEX(X)LOAD_NODE_MODULES(X, START)1. let DIRS=NODE_MODULES_PATHS(START)2. for each DIR in DIRS:a. LOAD_AS_FILE(DIR/X)b. LOAD_AS_DIRECTORY(DIR/X)NODE_MODULES_PATHS(START)1. let PARTS = path split(START)2. let I = count of PARTS - 13. let DIRS = []4. while I >= 0,a. if PARTS[I] = "node_modules" CONTINUEb. DIR = path join(PARTS[0 .. I] + "node_modules")c. DIRS = DIRS + DIRd. let I = I - 15. return DIRS

nodejs-模块系统相关推荐

  1. 基于源码剖析nodejs模块系统

    nodejs模块系统 简介 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之, 一个 No ...

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

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

  3. nodejs html引用js_NodeJS与模块系统

    本文作者:刘观宇,360 奇舞团高级前端工程师.技术经理,W3C CSS 工作组成员. 孤山寺北贾亭西,水面初平云脚低.几处早莺争暖树,谁家新燕啄春泥.乱花渐欲迷人眼,浅草才能没马蹄.最爱湖东行不足, ...

  4. Nodejs中的模块系统

    一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...

  5. NodeJS与模块系统

    孤山寺北贾亭西,水面初平云脚低.几处早莺争暖树,谁家新燕啄春泥.乱花渐欲迷人眼,浅草才能没马蹄.最爱湖东行不足,绿杨阴里白沙堤. ---- 唐.白居易<钱塘湖春行> 自从 Node8.5 ...

  6. NodeJs 之模块系统

    前言 随着前端的发展,工程模块儿化已经是必不可少的一部分了,为了让NodeJs的文件可以相互调用,NodeJs提供了一个简单的模块系统:简单点说:一个 nodeJs 文件就是一个模块儿 . 通过代码来 ...

  7. nodejs中的模块系统:exports导出模块

    node中的模块系统 示例: 模块作用域 成功获取add: module.exports

  8. (七)nodejs循序渐进-模块系统(进阶篇)

    模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是 ...

  9. javascript中的模块系统

    文章目录 简介 CommonJS和Nodejs AMD异步模块加载 CMD ES modules和现代浏览器 在HTML中使用module和要注意的问题 简介 在很久以前,js只是简单的作为浏览器的交 ...

  10. node中模块系统及核心模块、执行node文件

    node中模块系统: 1.模块系统:核心模块.第三方模块. 自己写的模块. 2.网页中所有的路径都是URL,而不是文件路径. 3.node偏底层开发,开启的服务器完全是一个黑盒子,所有的资源默认都是不 ...

最新文章

  1. 图像 DFT 尺寸转换
  2. 铃铛计数问题——分块
  3. 英雄联盟更新后服务器还在维护吗,英雄联盟今天维护到什么时候结束 11月12日停机更新维护公告...
  4. 高效的企业测试-单元和用例测试(2/6)
  5. PS教程第十一课:会打开 会关闭我回了
  6. 【转】Microsoft Graph 桌面应用程序
  7. redis-数据类型-string类型
  8. python123蟒蛇代码_巨蟒python全栈开发-第3天
  9. docker 容器的常用命令及配置
  10. java numberformat 方法_java.text.NumberFormat使用方法
  11. android x5 webview 第一次,android studio中配置X5 webview时的一个坑
  12. linux 可执行文件反编译,如何反汇编,修改,然后重新组装一个Linux可执行文件?...
  13. Linux驱动之Kconfig语法——学习笔记(11)
  14. 基于matlab的gmsk,基于matlab的gmsk
  15. firefox 网页无法播放视频问题
  16. 怎么简单的生成SSL证书
  17. springboot 自定义starter类
  18. 职场工作人员需不需要写日报
  19. android遥控杆控件,Android自定义滑杆控件SeekBar多功能版本
  20. 《游戏学习》Java版俄罗斯方块小游戏源码实战

热门文章

  1. 盘点互联网巨头奉献的十大开源安全工具
  2. svn 主干和分支项目代码更新与同步
  3. 前端框架——Jquery——基础篇2__获取DOM节点的值
  4. struts2中OGNL的访问
  5. 【转】电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解...
  6. Routeros双adsl线路基于ip分段策略路由
  7. ORz.....-0-
  8. 李开复给中国学生的第七封信:21世纪最需要的7种人才
  9. jquery书写一个简易的二级联动
  10. ZOJ Monthly, January 2013