Node.js 之基于文件的模块系统

Node.js 之基于文件的模块系统

 
/**
 * 
 *
 *
 * Kevin Dongaoor created CommonJS in 2009 with the goal to specify an ecosystem
 * for JavaScript modules on the server. Node.js follows the CommonJS module
 * specification. Following are a few salient points of the module system: •
 * Each file is its own module. • Each file has access to the current module
 * definition using the module variable. • The export of the current module is
 * determined by the module.exports variable. • To import a module, use the
 * globally available require function.
 *
 * Node.js 之基于文件的模块系统
 * Node.js 符合CommonJS模块规范。下面是模块系统中几个比较显著的特点:
 * 1.每个js文件是一个模块。
 * 2.每个文件通过变量module来定义模块。
 * 3.通过变量module.exports,我们可以让当前模块导出。
 * 4.通过全局函数require,导入其它模块。
 */
 

/**
 * Conditionally Load a Module
 *
 * require behaves just like any other function in JavaScript. It has no special
 * properties. This means that you can choose to call it based on some condition
 * and therefore load the module only if you need it.
 *
 * 条件性导入模块。--- require与js其它函数一样,没有特殊属性。这意味着你可以条件性的调用它,根据你的需要导入其它模块。
 *
 *
 * The require function blocks further code execution until the module has been
 * loaded. This means that the code following the require call is not executed
 * until the module has been loaded and executed. This allows you to avoid
 * providing an unnecessary callback like you need to do for all async I/O in
 * Node.js, which was discussed in Chapter 2.
 *
 * 其它:Object Factories、Shared State、Cached
 *
 * module.exports 导出的对象可以是函数,也可以是对象。如果是导出的是函数,且函数返回对象,我们就可以实现Object Factories。
 * 如果导出的对象是js对象,那么这个模块不管多少模块被导入,都是共享的--Shared State(模块被缓存了),这个共享机制可以用于配置文件中。
 * (详细代码见第三章相关)。
 *
 */
 


代码示例:

新建文件(模块)foo.js

module.exports = function(){
    console.log('a function in file foo');
}

然后,我们导入这个模块:

var foo = require('./foo');
foo();

执行结果:

a function in file foo


条件性导入模块:

var isReallyNeddFooModule = true;
if (isReallyNeddFooModule) {
    var f = require('./foo');
    f();
}


Reference:Beginning Node.js  (书)

你可能感兴趣的:(node.js,之基于文件的模块系统)