NodeJS学习笔记——CommonJS

2017-07-15  本文已影响0人  JacobMa1996

前言

陆陆续续两三天,一直在寻找好的学习资源,想跟着一套视频一直学习完整个系列过程,NodeJS发展实在太快,很多资源教程使用的版本,官方文档就已经更新换代,直接看官网的文档,又太过枯燥无味,特别是对于我从前端转过来,没有后端基础,对于很多概念不理解,直接看文档和源码也很难看懂.
实践又无从下手,所以结合网上良莠不齐的技术博客,教程书籍,视频实战,进行一个Node核心技术的学习,往后再是站点的搭建,希望在这过程中的关键知识点都能够做一个记录。

CommonJS

概念

Node应用由模块组成,采用CommonJS模块规范,为解决全局变量污染的问题;
JS作为函数是编程语言,支持闭包,把一段JS代码用函数包装起来,其所有全局变量就变成了函数的局部变量,每个函数作为一个模块,互相调用来实现模块机制;
根据这个规范,每个文件就是一个模块;

//example.js
var x = 5;
var addX = function (value) {
    return value + x;
};

module.exports.x = x;
module.exports.addX = addX;
//client.js
var example = require('./example');

console.log(example.x);
console.log(example.addX(1));

CommonJS的模块特点:

原理

Node内部提供一个Module构建函数,所有模块都是Module的实例;
每个module对象,代表当前模块,都有以下属性:

// example.js
var jquery = require('jquery');
exports.$ = jquery;
console.log(module);
{ id: '.',
  exports: { '$': [Function] },
  parent: null,
  filename: '/path/to/example.js',
  loaded: false,
  children:
   [ { id: '/path/to/node_modules/jquery/dist/jquery.js',
       exports: [Function],
       parent: [Circular],
       filename: '/path/to/node_modules/jquery/dist/jquery.js',
       loaded: true,
       children: [],
       paths: [Object] } ],
  paths:
   [ '/home/user/deleted/node_modules',
     '/home/user/node_modules',
     '/home/node_modules',
     '/node_modules' ]
}

exports AND module.exports

module通过其属性exports对外暴露要要输出的内容:

module.exports.x = x;

为了方便,Node为每个模块提供了一个exports变量,指向module.exports,等同于在每个模块的头部,添加了这样一行代码:

var exports = module.exports;

所以在对外输出接口时,也可以使用exports;

exports.x = x;

通过给exports的属性赋值,等同于给module.exports这个空对象添加属性和值;
但是,不能直接对exports赋值,因为在Node内部保存的是module对象,而对exports直接赋值,exports就不再指向module.exports这个对象,也就切断了exports和module.exports的联系;

require

require命令的基本功能是,读入并执行一个JavaScript文件,然后返回该模块的exports对象。如果没有发现指定模块,会报错。

根据参数的不同格式,require命令去不同路径寻找模块文件。

模块加载机制和缓存机制后面再更新;

参考文章:
http://javascript.ruanyifeng.com/nodejs/module.html
http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434502419592fd80bbb0613a42118ccab9435af408fd000

上一篇 下一篇

猜你喜欢

热点阅读