日期:2014-05-16  浏览次数:20357 次

nodejs学习之module部分
nodejs目前很火。我也来了解一下吧。今天看了modules的功能。
先看一下一段官方的例子吧。
circle.js一个封装了计划圆面积和周长计算的文件。
var PI = Math.PI;

exports.area = function (r) {
  return PI * r * r;
};

exports.circumference = function (r) {
  return 2 * PI * r;
};


其中exports用于对外输出的方法。

调用的js如下


var circle = require('./circle.js');
console.log( 'The area of a circle of radius 4 is '
           + circle.area(4));



这个就是一个modules的定义和调用。接下一起来学习一下执行执行顺序吧。当文件被require的时候,它会执行默认的顺序。
还是引用官方的例子
a.js:
console.log('a starting');
exports.done = false;
var b = require('./b.js');
console.log('in a, b.done = %j', b.done);
exports.done = true;
console.log('a done');

b.js:
console.log('b starting');
exports.done = false;
var a = require('./a.js');
console.log('in b, a.done = %j', a.done);
exports.done = true;
console.log('b done');

main.js:
console.log('main starting');
var a = require('./a.js');
var b = require('./b.js');
console.log('in main, a.done=%j, b.done=%j', a.done, b.done);


例子出现了循环调用。为了防止循环调用。它们是顺序执行,当执行到requer("./b.js"),b.js会完成执行,然后exports提供给a.js。


nodejs中也自带了一些core modules。它在nodejs的源代码里的目录:lib/下。

有关requre的一些细节:
如果filename.js没有找到,那么将会去寻找.js .json .node的文件。
如果不是以/ ./开头,那么,将会去寻找“node_modules”的内容。
那么会以当前module的父目录下查找/node_modules。如果没有找到,那么再往上查找一级。
如果/home/ry/projects/foo.js,的代码里有requre('bar.js');顺序应该是如下

/home/ry/projects/node_modules/bar.js // 当前目录的node_modules
/home/ry/node_modules/bar.js//上一级
/home/node_modules/bar.js//再上线
/node_modules/bar.js//



文件夹作为modules

在当前目录下创建package.json。

{ "name" : "some-library",
  "main" : "./lib/some-library.js" }


如果没有pageage.json,他会去寻找index.js 或者index.node.


判断当前的执行是否是从当前文件开始的。可以使用
require.main = module判断。

刚开始学习,就留下一些笔记吧。