在Node
中,采用CommonJS
模块规范。 什么是CommonJS规范
?
CommonJS
规范是为了解决JavaScript
的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过module.exports
导出对外的变量或接口,通过require()
来导入其他模块的输出到当前模块作用域中。
简单的说就是,根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
那在Node
中导入模块毫无疑问就是以require
的形式,导出模块有exports
和module.exports
两种,本文主要讲的就是这两者的区别。
一句话概括:require
返回的其实module.exports
这个对象,并不是exports
,而我们在编写模块时用到的exports
对象实际上只是对module.exports
的引用(reference)。
那这里涉及一个引用
概念:ECMAScript
的数据类型算上es6的Symbol
有7种,这7种又可以分为以下两种。
- 基本类型:
Undefined
、Null
、Boolean
、Number
、String
、Symbol
- 引用类型:
Object
举个引用类型的例子:
|
|
那么在Node
的每一个文件模块当中,module.exports
默认值为{}
, exports
当然也指向这个空对象。所以下面两者效果其实是一样的:
|
|
那么在引用的时候:
|
|
但是不能这么写:
|
|
引用时:
|
|
这样写才是ok的:
|
|
引用时:
|
|
至此,exports
和module.exports
的区别就是以上内容。
菜鸟学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。