Node.js模块以及模块加载机制
2019独角兽企业重金招聘Python工程师标准>>>
Node.js中的模块
在Node.js中,以模块为单位划分功能,通过一个完整的模块加载机制使得开发人员可以将应用程序划分为多个不同的部分。模块的使用可以提高代码重用率,提高应用程序的开发效率,而且开发人员可以根据具体的需求引入第三方模块或者自定义模块到应用程序中。 在Node.js中一个Node.js文件就是一个模块,这样的文件可以是JavaScript代码脚本,可以是JSON,也可以是编译过的C/C++扩展。
Node.js的核心模块与文件模块
在开发中可以使用require()方法加载模块,如果是加载Node.js的核心模块,只需要将被加载的模块的名称作为参数传给require()即可,程序示例:
var http = require('http'); //加载Node.js的核心模块http模块
var fs = require('fs'); //加载Node.js的核心模块fs模块var server = http.createServer(); //使用http模块创建服务
server.on('connection', function(request, response){ //通过on()方法监听connection事件fs.readFile('./text.txt', function(err, data){ //使用fs模块的readFile()方法读取text.txt文件内容if(err){console.log('文件读取时出现错误:' + err);}else{console.log(data.toString());}});
});server.listen(8000, '127.0.0.1');
程序运行截图:
在使用require()方法加载模块的时候,如果写错了模块的名称就会引起程序报错,require()函数将会抛出异常,程序示例:
var http = require('aaaa'); //故意写错模块名称var server = http.createServer();
server.on('connection', function(request, response){console.log(request.url);
});server.listen(8000, '127.0.0.1');
程序运行截图:
以下的几种文件可以作为Node.js的模块文件:
- 后缀名为.js的JavaScript脚本文件。
- 后缀名为.json的JSON文本文件。
- 后缀名为.node的经过编译的二进制模块文件。 在Node.js中加载模块时需要指定模块文件的完整路径以及文件名称。可以是相对路径也可以是绝对路径,程序示例:
- (1)创建myModule.js:
var myFunction = function(){console.log('自定义模块中的方法执行了。');
}exports.myFunction = myFunction;
- (2)创建module.js:
var myModule = require('./myModule.js'); //使用require()方法引入自定义模块myModule.myFunction(); //执行自定义模块中的方法
程序运行截图:
以类的方式定义模块
在定义模块时可以将“exports”对象写为“module.exports”,但是在以类的方式定义模块的时候只能写做“module.exports”。程序示例:
- (1)创建student.js模块文件:
var _Name,_Age;
var Name = '', Age = 0;//模块对象的构造方法
var student = function(name, age){_Name = name;_Age = age;
}//获取私有变量_Name的值
student.prototype.GetName = function(){return _Name;
}//设置私有变量_Name的值
student.prototype.SetName = function(name){_Name = name;
}//获取私有变量_Age的值
student.prototype.GetAge = function(){return _Age;
}//设置私有变量_Age的值
student.prototype.SetAge = function(age){_Age = age;
}student.prototype.Name = Name;
student.prototype.Age = Age;module.exports = student;
- (2)创建app.js文件:
var student = require('./student.js');var s1 = new student('Tom', 12);
/*
*获取模块中的私有变量
*/
console.log('模块中的私有变量:');
console.log('姓名:' + s1.GetName());
console.log('年龄:' + s1.GetAge());//设置模块中中公有变量的值
student.Name = 'Danny';
student.Age = 14;/*
*获取模块中公有变量值
*/
console.log('模块中的公有变量的值:');
console.log('姓名:' + student.Name);
console.log('年龄:' + student.Age);
程序运行截图:
加载node_modules目录中的模块
在Node.js中使用require()方法加载模块时只传入了文件名称作为require()方法的参数,而没有指明文件的路径,
require(‘module.js’); //只指定了文件的名称,没有指定文件的路径
则程序在运行的时候Node.js会将该文件视为node_modules目录下的文件。
通过目录加载模块
在Node.js中,把目录名称指定为模块名,就可以通过目录对模块进行管理。可以直接require一个目录,假设有一个目录名为folder,如:
var myMod = require('./folder');
程序在运行的时候,Node将搜索整个folder目录,Node会假设folder为一个包并试图找到包定义文件package.json。如果folder 目录里没有包含package.json文件,Node会假设默认主文件为index.js,即会加载index.js。如果index.js也不存在, 那么加载将失败。
从全局目录中加载模块
如果在操作系统的环境变量中设置NODE_PATH变量,并且已经将变量值设置为一个有效的磁盘目录,在使用require()方法加载模块时只指定了模块的名称而没有指定模块的路径,而且Node.js从其他路径中找不到需要被加载的模块文件时,Node.js将会从NODE_PATH变量值所指向的磁盘目录中寻找并加载模块文件。如果最终都没有找到,require()方法就会抛出异常。
require()方法对模块的查找策略
Node.js的require()方法加载模块时,对模块文件的查找策略如下图:
转载于:https://my.oschina.net/u/3346420/blog/1924883
Node.js模块以及模块加载机制相关推荐
- Node模块引入与加载机制
Node模块引入与加载机制 引入模块 Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获 ...
- python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...
基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...
- Node.js项目中动态加载环境变量配置
NODE_MODULES:项目中动态加载环境变量配置 开始 在平时的 Node.js 项目开发中,我们需要在项目中添加各种各样的配置:服务端口.服务地址.图片上传.数据库.Redis 等等. 通常情况 ...
- Node.js中模块加载机制
Node.js中模块加载机制 模块查找规则-当模块拥有路径但没有后缀时 1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块. 2. 如果模块后缀省略,先找同名JS文件再找同名J ...
- Node.js学习笔记——模块加载机制及npm指令详解
文章目录 二.模块化 1.模块化的基本概念 2.Node.js 中的模块化 Node.js 中模块的分类 加载模块 Node.js 中的模块作用域 向外共享模块作用域中的成员 Node.js 中的模块 ...
- nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
- Node.js(一、Node.js基础、模块加载机制、包等)
Node.js(一.Node.js基础.模块加载机制.包等) 1.Node.js基础 1.1.Node是什么 1.2.Node环境安装失败解决方法 1.2.1.Node环境搭建 1.2.2.错误代码2 ...
- Node.js---02、node.js 模块加载机制
2019独角兽企业重金招聘Python工程师标准>>> node.js模块分为自定义模块.扩展模块和核心模块.所有模块的加载都是通过关键字require()实现. 1.自定义模块的加 ...
最新文章
- 一次被僵尸网络病毒攻击的过程
- python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?
- 编译 ioftpd v7.7.3
- Linux下程序包管理工具RPM
- python序列化详细教程
- easylog 使用_Easyloggingpp的使用
- 阿里Java编程规约(注释)提炼
- CSS中定义多个链接样式,在CSS中定义【导航栏】超链接样式
- 设计模式-第二篇之简单工厂模式
- Anylogic模型搭建01:医院排队挂号模拟试验
- Windows10专业版系统“本地组策略编辑器”丢失解决方案
- 【毕业设计】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
- Python3.5抓取代理IP并验证有效性
- comon lisp标准_common-lisp – Common Lisp的最新标准
- 15计算机应用专业综合理论试卷答案,2013年南通市对口单招计算机应用专业综合理论第二次模拟试卷(含答案).doc...
- 有哪些适合新手的练手Java项目?
- 使用VS Code开发AngularJS 2 第一个应用程序
- java做mp3_用java编写MP3播放器
- D - Squirrel and chestnut(二分)
- 剪切板 html 查看器,剪贴板历史查看器
热门文章
- linux配置端口ipv6地址,linux配置ipv6地址命令
- java中什么是task_20171018java总结——Spring任务调度task:scheduled-tasks
- oracle kepserve,Kepware.KEPServer\KEPServerEX_V5操作简介含opc quick client 连接测试
- python怎样导入scrapy_(Python)在导入的模块scrapy中找不到任何项目
- java中0x07_JAVA里0X00的表示
- c语言中的所有关键字,C语言中的32个关键字
- 高斯课堂数电讲义笔记_学技树
- 未来计算机领域最急缺的人,未来十年最紧缺职业 没人愿意干的高薪职业
- arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
- pyqt生成 android,PyQt on Android