CommonJS 笔记

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() 小节。

CommonJS 笔记_第1张图片
image.png

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 文档

你可能感兴趣的:(CommonJS 笔记)