`
devil13th
  • 浏览: 43286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nodejs-模块

阅读更多

在开发一个复杂的应用程序的时候,我们需要把各个功能拆分、封装到不同的文件,在需要的时候引用该文件。没人会写一个几万行代码的文件,这样在可读性、复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组织方式,比如Java中的包、C#中的程序集等,node.js使用模块和包来组织,其机制实现参照了CommonJS标准,虽未完全遵守,但差距不大,使用起来非常简单。

 

模块在node.js中的概念很简单,看看如何创建一个我们自己的模块供开发复用。

在node.js中创建模块非常简单,一个文件就是一个模块,所以我们创建一个module_1.js文件就创建了一个模块

console.log("load moudle_1.js");
var name='';
function setName(n){
    name=n;
} 
function printName(){
    console.log(name);
}
exports.setName=setName;
exports.printName=printName;

 问题是怎么使外部访问这个module,我们知道客户端的JavaScript使用script标签引入JavaScript文件就可以访问其内容了,但这样带了的弊端很多,最大的就是作用域相同,产生冲突问题,以至于前端大师们想出了立即执行函数等方式,利用闭包解决。node.js使用exports和require对象来解决对外提供接口和引用模块的问题。我们可以把模块中希望被外界访问的内容定义到exports对象中,例如

var m = require("./moudle_1.js");
m.setName("thd");
m.printName();
var m2 = require("./moudle_1.js");
m2.setName("thirdteendevil");
m2.printName();
m.printName();

 我们可以把module_1.js中的exports看做是一个对象,在app_1.js中第一行require("./moudle_1.js");返回的就是moudle_1.js中的exports对象。(不晓得是不是真的这样啊,仅仅是个人猜测)

 

再看一种情况

moudle_2.js:

console.log(" load moudle_2.js ");
var Student  = function(name){
	this.name = name;
} 
Student.prototype = {

	getName : function(){
		return this.name;
	},
	setName : function(name){
		this.name = name;
	}
}
exports.Student=Student;

 app_2.js

var Student = require("./moudle_2.js").Student;

var s1 = new Student("thd");
console.log(s1.getName()+"|||");


var s2 = new Student("thirdteendevil");
console.log(s2.getName()+"|||");
console.log(s1.getName()+"|||");

 在moudle_2.js中,exports.Student指向了一个函数(类),在app_2.js中第一行代码require("./moudle_2.js")按照上例的理解,返回的是moudle_2.js中的exports,但moudle_2.js中最后定义了exports.Student=Student,

所以在app_2.js中如果要使用exports.Student属性则需要写成var Student = require("./moudle_2.js").Student;

 

综上所述,将require("./xxx.js")理解为 xxx.js中的exports对象就可以了。

 

初学nodejs以上内容均为个人理解,如有不当之处,还望高手指点。

注:模块的英文是module以上的文件因个人英语水平全部写成了moudle,自行修改吧。。。

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    xxtea-nodejs-master.zip

    5. **文档**:如果项目完善,可能会包含一份README文件,详细解释XXTEA算法的基本原理、如何安装和使用这个Node.js模块,以及可能遇到的问题和解决方案。 6. **许可证**:项目通常会包含一个LICENSE文件,说明代码...

    微信小游戏-斗地主,包含nodejs-服务器-nodejs-server-wechat-landLordGame.zip

    3. **models/**:存放游戏逻辑和数据结构的模块。 4. **routes/**:处理HTTP请求的路由文件。 5. **controllers/**:处理业务逻辑的控制器文件。 6. **public/**:存放静态资源,如CSS、JavaScript和图片。 7. **...

    cos-nodejs-sdk-v5:腾讯云 COS Nodejs SDK(XML API)

    cos-nodejs-sdk-v5腾讯云 COS Nodejs SDK()installnpm i cos-nodejs-sdk-v5 --savedemo// 引入模块var COS = require('cos-nodejs-sdk-v5');// 创建实例var cos = new COS({ SecretId: '...

    nodejs-10.12.0版本下载

    这个"nodejs-10.12.0版本下载"的标题表明我们要讨论的是Node.js的一个特定版本,即v10.12.0。这个版本在Node.js的历史中占有一定的位置,因为它包含了该框架在2018年中期的一些关键更新和改进。 Node.js 的版本号...

    awesome-nodejs-master.rar

    【标题】: "awesome-nodejs-master" 是一个与Node.js相关的资源库压缩包,它很可能包含了各种优秀的Node.js模块、工具、示例代码和最佳实践的集合。 【描述】: "awesome-nodejs-master.rar" 指出这是一个主版本的...

    NodeJs - Native实现短信验证码注册登录完整示例:NodeJs - Native.js和附件说明

    1. **用户请求验证码**:当用户输入手机号并请求验证码时,后端通过`Native.js`模块调用短信服务商API,生成一个随机验证码,并将其存储在服务器的会话或缓存中,同时发送到用户手机。 2. **发送验证码**:`Native....

    nodejs-demo改进版

    【Node.js 概述】 Node.js 是一个基于 Chrome V8 引擎的 ...总的来说,"nodejs-demo2" 是一个适合初学者的 Node.js 入门示例,通过它,你可以学习到 Node.js 的基本概念和常用操作,为进一步深入学习和开发提供基础。

    vscode-debug-nodejs-es6, 如何使用VSCode调试 ES6 NodeJS.zip

    vscode-debug-nodejs-es6, 如何使用VSCode调试 ES6 NodeJS vscode-debug-nodejs-es6如何使用VSCode调试 ES6 NodeJS 先决条件VSCode: http://code.visualstudio.com/NodeJS: https://nodejs.o

    NodeJs-v6.0.0- 64bit

    6. **丰富的生态系统**:Node.js 社区发展活跃,拥有大量的开源模块,可以通过 npm(Node Package Manager)进行安装和管理,这些模块涵盖了网络、数据库、文件操作、模板引擎等各种功能,大大简化了开发过程。...

    my-nodejs-web-project-源码.rar

    2. **node_modules** - 存放项目依赖的第三方模块,这些模块由 `npm` 管理。 3. **src** 或 **app** - 主要的源代码目录,可能包含以下子目录: - **controllers** - 处理 HTTP 请求的业务逻辑。 - **models** - ...

    nodejs-learning-guide, Nodejs学习笔记以及经验总结.zip

    "nodejs-learning-guide"是针对Node.js的学习资源,包含了一个完整的学习路径和实践经验的总结,对于想要深入理解和掌握Node.js的开发者来说,是一份宝贵的资料。 首先,Node.js的核心特性包括事件驱动、非阻塞I/O...

    nodejs-demo-express4

    在这个"nodejs-demo-express4"项目中,我们可以学习到如何使用Express 4来创建Web服务、路由配置、处理HTTP请求和响应,以及如何整合其他Node.js模块。 描述中提到“粉丝日志”,这可能意味着这个示例项目是为展示...

    Atom-atom-nodejs-snippets,nodejs和javascript片段的集合。对Amandepmittal/Atom的贡献.zip

    3. **模块导入**:Node.js中的模块导入语句可以一键生成,包括`require`和`import`,使得依赖管理更加便捷。 4. **异常处理**:内置了`try-catch`块的快捷插入,帮助开发者快速处理可能出现的错误。 5. **Express...

    NodeJS-212.5080.16.zip

    Node.js的生态系统也非常繁荣,拥有数万个开源模块,可以通过npm进行安装,这些模块涵盖了从数据库连接、模板引擎到自动化工具等各个领域,极大地丰富了Node.js的开发能力。 在PyCharm中安装Node.js插件的步骤通常...

    nodejs-node -modules.zip

    Node.js 的核心特性之一是它的模块系统,这在"nodejs-node-modules.zip"文件中得到了体现。这个压缩包很可能包含了项目中使用的各种第三方模块,这些模块通常位于项目的 `node_modules` 目录下。 在 Node.js 中,...

    基于Node.js的nyaa-nodejs-demo项目设计源码

    nodejs-demo项目设计源码,涵盖151个文件,其中包括40个C++头文件、35个构建脚本文件、35个JSON配置文件、11个C++源文件、8个C头文件、7个JavaScript源文件、3个Markdown文件、3个JPEG图片文件、2个Git忽略规则文件...

    skill-sample-nodejs-quiz-game, 演示如何构建测试游戏技巧的Alexa技能示例.zip

    4. `util`目录:包含了一些辅助工具函数,如随机选择问题、验证答案等,这些函数使代码更模块化,易于维护。 5. `package.json`:定义了项目的依赖关系和脚本,包括安装依赖、部署到Lambda等操作。 在实际开发中,...

    nodejs 使用nodejs-websocket模块实现点对点实时通讯

    nodejs-websocket模块是Node.js中用于创建websocket服务器的一个简单而强大的模块。通过nodejs-websocket模块,开发者可以快速搭建出支持点对点通信的服务端和客户端。 在服务端,首先需要安装nodejs-websocket模块...

    desafio02-ignite-nodejs-源码.rar

    8. **模块化编程**:Node.js 应用通常采用模块化设计,理解如何组织代码以提高可读性和可维护性。 9. **性能优化**:项目可能涉及到 Ignite 的性能调优技巧,比如设置适当的缓存配置、内存分配等。 10. **文档编写...

    PyPI 官网下载 | aws_cdk.aws_lambda_nodejs-1.63.0-py3-none-any.whl

    在CDK中,`aws_cdk.aws_lambda_nodejs`模块提供了一个构造函数,用于创建和配置基于Node.js的Lambda函数。这个模块包括了将源代码打包、设置依赖、配置执行角色等功能。通过这个模块,开发者可以轻松地在他们的CDK...

Global site tag (gtag.js) - Google Analytics