概述

CommonJS是服务器端模块的规范,Node.js采用了这个规范。

根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。下面就是一个简单的模块文件example.js。

console.log("evaluating example.js");
var invisible = function () {console.log("invisible");
}
exports.message = "hi";
exports.say = function () {console.log(message);
}

使用require方法,加载example.js。

var example = require('./example.js');

这时,变量example就对应模块中的exports对象,于是就可以通过这个变量,使用模块提供的各个方法。

{message: "hi",say: [Function]
}

require方法默认读取js文件,所以可以省略js后缀名。

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

js文件名前面需要加上路径,可以是相对路径(相对于使用require方法的文件),也可以是绝对路径。如果省略路径,node.js会认为,你 要加载一个核心模块,或者已经安装在本地 node_modules 目录中的模块。如果加载的是一个目录,node.js会首先寻找该目录中的 package.json 文件,加载该文件 main 属性提到的模块,否则就寻找该目录下的 index.js 文件。看一个复杂一点的例子。

// foobar.js
function foobar(){this.foo = function(){console.log('Hello foo');}this.bar = function(){console.log('Hello bar');}
}
exports.foobar = foobar;

调用该模块的方法如下:

var foobar = require('./foobar').foobar, test = new foobar();
test.bar(); // 'Hello bar'

有时,不需要exports返回一个对象,只需要它返回一个函数。这时,就要写成module.exports。

module.exports = function () {console.log("hello world")
}

AMD规范与CommonJS规范的兼容性

CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。由于 Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适 用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。

AMD规范使用define方法定义模块,下面就是一个例子:

define(['package/lib'], function(lib){ function foo(){lib.log('hello world!');}  return {foo: foo};
});

AMD规范允许输出的模块兼容CommonJS规范,这时define方法需要写成下面这样:

define(function (require, exports, module){var someModule = require("someModule");var anotherModule = require("anotherModule");    someModule.doTehAwesome();anotherModule.doMoarAwesome();exports.asplode = function (){someModule.doTehAwesome();anotherModule.doMoarAwesome();};
});

参考链接

Addy Osmani, Writing Modular JavaScript With AMD, CommonJS & ES Harmony

转载自:http://javascript.ruanyifeng.com/nodejs/commonjs.html#toc0

CommonJS规范(转)相关推荐

  1. Commonjs规范

    为什么有模块化 1.方便代码维护 2.每个功能放到一个模块内 3.解决命名问题,全局变量污染问题 常见的模块化 1.我们写方法写属性都放在对象里(单例模式) 缺陷声明的对象也有可能命名冲突,不能完全解 ...

  2. CommonJS规范与AMD规范的理解

    2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/32.html 谈到AMD,我们首先来了解一个基于AMD规范 ...

  3. Javascript模块规范(CommonJS规范AMD规范)

    Javascript模块化编程(AMD&CommonJS) 前端模块化开发的价值:https://github.com/seajs/seajs/issues/547 模块的写法 查看 AMD规 ...

  4. 理解AMD ,CMD,CommonJS规范

    https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...

  5. EJS学习(五)之EJS的CommonJs规范版本

    EJS的CommonJs规范版本 ejs分为两个版本一个是CommonJs版本,另外一个是AMD规范的版本. 基础:html页面 安装:<script type="text/javas ...

  6. CMD、AMD、commonJs 规范的写法

    比较好的文章: http://www.jianshu.com/p/d67b... AMD 是 RequireJS 在推广过程中对模块定义的规范化产出. CMD 是 SeaJS 在推广过程中对模块定义的 ...

  7. NodeJS学习笔记—1.CommonJS规范

    由于现在web开发,越来越重视代码的复用和抽象的封装,为了解决代码的组织结构.管理.复用和部署等问题,现在普遍采用的机制是模块机制(module).CommonJS约定桌面应用程序和服务器应用程序需要 ...

  8. Commonjs规范及Node模块实现

    前面的话 Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性.本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于java ...

  9. Modularity(模块化-CommonJS规范)

    第二阶段: CommonJS规范 CommonJS就是一个JavaScript模块化的规范,该规范最初是用在服务器端的node的,前端的webpack也是对CommonJS原生支持的. 根据这个规范, ...

最新文章

  1. 上传图片,多图上传,预览功能,js原生无依赖
  2. ISA SERVER 2004 对多重网络支持功能简述
  3. Gradle之依赖管理
  4. memcached 使用 java_java中Memcached的使用(包括与Spring整合)
  5. 罗马数字转换成数字java_C趣味编程百例(31)将阿拉伯数字转换为罗马数字
  6. ride中for循环的使用_robotframework-ride使用(Builtin标准库)
  7. CVE-2021-20226:详解 Linux 内核 IO_URING 子系统中的引用计数漏洞
  8. java jdk 加密_jdk实现常见的加密算法
  9. 学习webbench需要掌握的基础知识(webbench源代码学习心得)
  10. 二进制十六进制转换表
  11. python uci_UCI机器学习数据库的Python API介绍
  12. PHP与前端谁的工资高,前端和后端哪个工资高一些
  13. 手机投屏到电脑的5种方式,你学到了吗!
  14. python操作网页flash视频_selenium自动化过程中如何操作Flash动画
  15. JavaWeb开发QQ动态表情-源文件
  16. 3天完成Open CPU开发!7天完成Costdown
  17. 微信小程序解码emoji表情
  18. 微信小程序按钮添加背景
  19. 单刀双掷的模拟开关MAX4544
  20. 摄像机服务器端返回消息错误,_平安城市_视频监控(本科)毕业论文设计.doc

热门文章

  1. 中国锂电池行业发展机遇及营销策略前景研究报告2021-2027年版
  2. openresty开发系列3--nginx的平滑升级
  3. html语义化练习易牛课堂代码
  4. 请求外部图片的时候,遇到403的错误的解决方案
  5. shell基本语法和执行
  6. 安装 Flex2packagebeta_1.994
  7. 百度web前端面试题之求两个数的最大公约数和最小公倍数
  8. Flex 中的 RSL
  9. [转]COM对象创建-外部机制
  10. 遨游金山网盾?蹦出来有啥用?