Node.js 的module 系统

  相较于原生的JavaScript,不同的JavaScript文件之间很难共享变量。有鉴于此,Node.js在JavaScript的基础上进行了扩充,引入了require,exports,module三个global object。

一、absolute module 和 relative module

  Smashing Node.js 的作者将node.js 中的modules 分成了两类,一类是absolute modules,一类是 relative modules。

  <1> absolute modules,指的是是node core自带的重要modules,如http,fs等,我们使用这些modules时,只需要 require(‘module_name’)即可;还包括用npm安装的第三方module,这些module 默认安装的位置是./node_modules/ 路径下,使用这些modules时,同样只需要require(‘module_name’)即可。但是,在package.json文件中要添加这些module的name,以便使用npm安装。

  <2> relative modules,指的是我们自己写的modules,这些modules一般存在于工程文件夹内部,引用时我们需要以require(‘相对路径/module_name’)的方式引用。相对路径,指的是这些modules相对工程文件夹的存放的位置。

  通过这些modules,我们可以将复杂的node.js javascript代码分割在不同的文件中,简化我们的工程的管理与维护。

二、什么是require?

  在最开始的时候,我们可以简单的把require理解为加载,包含。对于普通的js文件来说,我们在一个a.js文件,require另外一个b.js文件,b.js文件会自动的插入到a.js文件的地方。

1 name_a = ‘a‘;
2 console.log(name_a);
3 //console.log(name_b);//会出错,name_b未定义
1 name_b =‘b‘
2 console.log(name_b);
1 require(‘./module_a‘); //relative module,需要给出module的路径
2 require(‘./module_b‘);
3
4 console.log(name_a);
5 console.log(name_b);

三、module和exports

  <1> 通过exports 返回对象的实例:

  默认,每个module通过exports返回一个空的对象实例,我们可以通过给该module的exports增加属性来改变该module返回的对象实例。

1 module_a.js
2
3 exports.name = ‘john’;
4 exports.data = ‘this is some data’;
5 var privateVariable = 5;
6 exports.getPrivate = function () {
7 return privateVariable;
8 };
1 index.js
2
3 var a = require(‘./module_a’);  //注意,exports默认返回的是一个已经创建好的对象实例,所以可以直接调用属性,而不需要new。
4 console.log(a.name);
5 console.log(a.data);
6 console.log(a.getPrivate());

<2> 通过module.exports 返回constructor 函数:

  虽然通过module.exports可以传递创建好的对象实例,但有时候我们希望在传递时能控制这个对象的创建过程,此时我们需要传递constructor函数:

1 module.exports = Person;
2
3 function Person(name){
4     this.name = name;
5 }
6
7 Person.prototype.talk = function() {
8     console.log(‘my name is ‘, this.name);
9 }
1 var Person = require(‘./person’);
2 var john = new Person(‘john’); //Person 为constructor函数,必须new之后才能使用
3 john.talk();

  至于 module.exports 和 exports的使用还是有一些区别的,module.exports 用于导出类型(只能用module.exports),exports用于导出对象的实例(虽然module.exports 也可以),可以参考以下博文。

http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html
时间: 2024-10-13 16:49:46

Node.js 的module 系统的相关文章

Node.js 的模块系统

Node.js的模块系统是借鉴 CommonJS 的 Modules 规范实现的,因此,下面我们需要先了解 CommonJS 的 Modules 规范,希望对大家学习Node.js有所帮助. CommonJS 的 Modules 规范 CommonJS 对模块的定义非常简单,主要分为 模块引用.模块定义和模块标识三个部分. 1. 模块引用 - require() 方法 2. 模块定义 - module.exports 对象 3. 模块标识 - 传递给 require() 方法的参数 通过 Com

【node.js】模块系统、函数

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.world(); 以上实例中,代码 require('./hello') 引入了当前目录下的hello.

Node,js的模块系统

模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'mk.js' 文件,代码如下: 以上实例中,代码 require('./hello') 引入了当前目录下的hello.js文件(.

Node.js:模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 一.创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 main.js 文件,代码如下: var hello = require('./hello'); hello.world(); 以上实例中

node.js 16 模块系统

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/2817/ const?http?=?require('http') 在node.js中,一个应用程序由若干模块组成,而这些模块,我们可以理解为是一个JavaScript文件,以.js结尾的文件. 原生模块 对于上述的'http'是原生模块,在node.js安装后是系统自带的.使用模块时只需要通过 require 进行引入即可. 在这段代码中,使用require函数来引用http模块,该函数返回http

深入理解node.js的module.export 和 export方法的区别

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log('My name is Lemmy Kilmister'); }; 在另一个文件中你这样引用 var rocker = require('./rocker.js'); rocker.name(); // 'My name is Lemmy Kilmister' 那到底Module.exports是什

Node.js中module文件定义的top-level变量为何是私有的

在Node.js中,module文件里面使用var,const或者let定义的top-level变量为何是私有的,只能在这个模块文件中使用呢? 原因就是,在模块文件中的内容执行之前,node.js会降模块文件包含在一个函数当中,像下面这样: (function(exports, require, module, __filename, __dirname) { // Module code actually lives in here }); 这样处理之后,module文件里面定义的top-le

node.js中module.export与export的区别。

对module.exports和exports的一些理解 可能是有史以来最简单通俗易懂的有关Module.exports和exports区别的文章了. exports = module.exports = {}; 所以module.exports和exports的区别就是var a={}; var b=a;,a和b的区别 看起来木有什么太大区别,但实际用起来的时候却又有区别,这是为啥呢,请听我细细道来 关于Module.exports和exports有什么区别,网上一搜一大把,但是说的都太复杂了

node.js exports module.exports

(make.js)function show(data){ console.log("WEILCOME" + data); } exports.show = show 获取 var show = require("./make").show;show("jinkang"); 输出   WELCOME jinkang (make.js)exports.show = function(data){ console.log("WEILCOME