NodeJS require 介绍

发布于 2021-07-20 12:30:22 字数 1311 浏览 1487 评论 0

一、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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

文章
评论
84963 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文