一、什么是模块化与模块?
将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为
模块化
。
其中拆分出的
每个文件就是一个模块
,模块的内容数据是私有的,不过模块可以暴露内部数据以便其他模块使用。
二、什么是模块化项目?
编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目。
三、模块化好处
防止命名冲突
高复用性
高维护性
四、模块化初体验
编辑
五、模块暴露数据
暴露数据第一种方式:
module
.
exports
=value
编辑
暴露数据第二种方式:
exports
.
name
=value
编辑
注意:
· module.exports
可以暴露
任意
数据
·
不能使用
exports=value
的形式暴露数据,模块内部
module
与
exports
的隐形关系
exports=module.exports={}
六、导入文件模块
const ti=require('./me.js');
1. require
对于自己导入创建的模块,导入时路径建议写
相对路径
,且不能省略
./
或
../
2. js
和
json
文件导入时可以不用写后缀,
c/c++
编写的
node
扩展文件也可以不写后缀,但是一般用不到(若文件名字相同,后缀一个
js
,一个
json
,则会先执行
js
)
如果导入其他类型文件,会以
js
文件处理
如果导入路径是个文件夹,则会首先检测该文件下
package.json
文件中的
main
属性对应的文件,如果存在则导入,反之如果文件不存在会报错。
如果
main
属性不存在,或者
package.json
不存在,则会尝试导入文件夹下的
index.js
和
index.json,
如果还是没找到,就会报错
导入
node.js
内置模块时,直接
require
模块的名字即可,无需加
./
或
../
七、require导入的基本流程(导入自定义模块的)******
将相对路径转为绝对路径,定位目标文件
缓存检测
读取目标文件代码
包裹为一个函数并执行(自执行函数)。通过
arguments.callee.toString()
查看自执行函数
缓存模块的值
返回
module.exports
的值
八、CommonJS模块化规范
module.exports\exports
以及
require
这些都是
CommonJS
模块化规范中的内容
而
Node.js
是实现了
CommonJS
模块化规范,二者关系有点像
JavaScript
与
ECMAScript