ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
CommonJS对模块的定义十分简单,主要分为模块引用、模块定义和模块标识三个部分。 ## 1.模块引用 模块引用的示例代码如下: ~~~ const math = require('math'); ~~~ 在CommonJS规范中,存在 require()方法,这个方法接受模块标识符,以此引入一个模块的API到当前上下文中。 ## 2.模块定义 在模块中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports 对象用于导出当前模块的方法或者变量,并且它是唯一导出的入口。在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式: ~~~ //math.js exports.add = function(){ let sum = 0, i=0, args = arguments, l = args.length; while(i<l){ sum += args[i++]; } return sum; }; ~~~ 在另一个文件中,我们通过require()方法引入模块后,就能调用定义的属性或者方法了: ~~~ "use strict"; //program.js const math = require('./math'); console.log(math.add(1,2)); exports.increment = (val)=>{ return math.add(val, 1); }; ~~~ ## 3.模块标识 模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以.、..开头的相对路径、绝对路径。可以没有文件名后缀 .js 。 模块的定义非常简单,接口也十分简洁。它的意义在于将类聚的方法和变量等限定在私有的作用域中,同时支持引入和导出功能以顺畅的连接上下游的依赖。每个模块都有独立的空间,它们互不打扰,在引用时也显得干净利落,如图: ![](https://box.kancloud.cn/2016-08-25_57bdc8fb7dbd0.png) CommonJS构建的这套模块导出和引入机制使得用户完全不必考虑变量污染,命名空间等方案与之相比相形见绌。