CommonJS 规范是什么?
在 ES6 之前 JavaScript 是没有模块的概念的,而 Python 有 import 机制,PHP 有 include 和 require 。CommonJS 有一个美好的愿景就是构建 JavaScript 的生态系统,让 JavaScript 也能够运用于 Web 服务器、桌面程序、命令行程序等,进而制定一系列的规范。而这只是一些理论,理论通常要通过实践,才能更好的推广,Node.js 借鉴了 CommonJS 的模块规范,所以 JavaScript 生态系统才变得繁荣。
模块(Modules)规范
每个文件都是一个模块,拥有独立的作用域,对其他文件是不可见的。
CommonJS 模块的定义有三点:
-
模块定义
// hello.js 文件 module.exports = function (){ console.log('hello CommonJS'); }
-
模块引用
let hello = require('./hello'); hello(); // 打印出 hello CommonJS
-
模块标识
模块标识其实就是传递给
require()
的参数,详细可以看下面require()
小节。
Module 对象
Node.js 内部提供一个 Module
构建函数。所有模块都是 Module
的实例。在每个模块中,在文件中变量 module
是一个指向表示当前模块的对象的引用,所以 module.exports
也可以写成 exports
,为什么可以这样写,因为 exports
等同于 var exports = module.exports
。
The exports variable is available within a module's file-level scope, and is assigned the value of module.exports before the module is evaluated.
参考资料
- CommonJS wiki
- CommonJS规范
- 深入浅出 Node.js 第二章的 CommonJS 规范
- Node.js v8.9.0 文档
网友评论