NodeJS require 介绍

发布于 2021-07-20 12:30:22 字数 1311 浏览 1485 评论 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

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

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

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