node暴露(exports)规则和加载(require)规则

node笔记

  • fs核心模块中的readFile,readDir
  • http核心模块createServer,listen,on
  • url核心模块url.parse 从路径中取出
  • 服务端重定向
//301是永久重定向 单向性
res.statusCode = 302 //临时重定向
res.setHeader('Location',path) //设置重定向的路径

5.暴露规则

  • 可以理解为在每一个模块中都有一个module对象
  • const module={ exports:{} }然后module中有一个exports对象 ,然后在末尾 return module.exports ,但是这个是在node底层的我们看不见
  • 在哪一个文件中require那个文件就会得到module.exports
  • 但是平常我们还能见到这种写法exports.
  • 但是呢我们平常还可以用到这种写法exports.a = 'hello nodejs'那这种情况这个exports是什么?
  • 其实在这里面还有一条语句const exports = module.exports同样这也是底层实现的
  • 还有一种情况exports = 'hello nodejs'这个是不对的 因为最后return的是module.exports并不是exports
module.exports = 'hello nodejs'
exports.foo = 'helle' //这样的话会报错因为module.exports已经被改成了一个字符串,不是一个对象了。

6.require暴漏规则

  • 优先从缓存加载
  • 6.1.加载核心模块 核心模块其实也有对应的文件,由于node是开源的所以这个可以在github上查看源码在lib目录有这些文件 例如fs 、url、http等require('fs) ....
  • 6.2第三方模块 也就是我们平常npm的那些包,这个写法和核心模块的类似没有路径require('jquery') ......
  • 这中加载规则是为默认找node_modules这个目录,然后再在这个目录中找jquery这个目录,在这个目录下找到package.json中的main属性,main属性就记录了jQuery的入口js模块, 然后就会加载这个包,实际还是加载的文件。
  • 如果没有package.json或则main中没有路径,index.js文件就是默认选择的文件,但是如果这个文件也没有运行时就会报错。
  • !!! 重点 !!! 如果上面的一切都不成立,也就是说在此目录中没有找到node_modules,会默认在上一级目录中有没有这个node_modules,如此向上找知道查询到磁盘根目录,如果还没有找到则会报错 can‘t find module xxx
  • 6.3 自己写的js文件加载require('./index.js')自己的js文件肯定是要把路径写上的,如果不写路径的话但是它也不是核心模块,也不是第三方的包,肯定是会报错的。
发布了84 篇原创文章 · 获赞 204 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44983621/article/details/104394113
今日推荐