NodeJS require 介绍
一、require 加载模块是同步的
二、加载模块过程
情况一、require('./test.js') 是具体文件名
直接根据给定的路径去加载模块,找到了就加载成功,找不到就加载失败
情况二、require('./test') 不是具体的文件名
1、根据指定的路径,依次添加文件后缀 .js、.json、.node 进行匹配
2、如果没有找到,查找是否有test目录(尝试找test包)
-找不到,加载失败
-找到了,依次在test目录下查找 package.json 文件(找到该文件后尝试找 main 字段中的入口文件)、index.js、index.json、index.node 找不到则加载失败。
情况三、require() 的参数不是路径,直接就是一个模块名称
1、现在核心模块中查找,是否有和给定的名字一样的模块,如果有则直接加载
2、如果核心模块中没有该模块,那么就认为这个模块是一个第三方模块(自定义模块)
--先会去当前 js 文件所在的目录下去找是否有一个 node_modules 文件夹
--没有再去找父目录
三、require 加载模块时的注意点
1、所有模块第一次加载完毕之后都会有缓存,避免了二次开销,因为有缓存,所以模块中的代码只在第一次加载时候执行一次。
2、每次加载模块的时候都优先从缓存中加载,缓存中没有的情况下才会按照 node.js 加载模块的规则去查找
3、核心模块在 node.js 源码编译的时候,都已经编译为二进制执行文件,所以加载速度较快(核心模块的加载的优先级仅次于缓存加载)
4、核心模块都保存在 lib 目录下
5、试图加载一个和核心模块同名的自定义模块(第三方模块)是不会成功的
6、核心模块只能通过模块名称来加载
7、require() 加载模块使用 ./ 相对路径时,相对路径是相对当前模块,不受执行 node 命令的路径影响。
8、建议加载文件模块的时候,始终添加文件后缀名,不要省略。
四、module.exports 介绍
用于设置模块返回值使用(require() 的返回值)
module.exports = 'hello'
module.exports = 666
module.exports = function(){}
注意:不设置的时候返回是 {}
module.exports 与 exports 区别
最终 require() 返回的是 module.exports 对象中的数据
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论