开发者学堂课程【Node.js 入门与实战:require加载模块时的注意点】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8296
require加载模块时的注意点
一、require 加载模块注意点
//情况一: require()的参数是一个路径
require( " ./index2.js")
/ /index2.js
1/ index2.json
//index2.node
// index2
文件夹-> package.json -> main
(入口文件 app.js -> index.js/index. json/index.node)->加载失败require( ./index2")
//情况二:require(的参数不是路径,直接就是一个模块名称
//-1.·先在核心模块中查找,是否有和给定的名字一样的模块。如果有,则直接加载该核心模块。
//require("http')
//2.如果核心模块中没有该模块那么就会认为这个模块是一个第三方模块(自定义模块)
//先会去当前js文件所在的目录下去找是否一个一node_modules文件夹
//require( "mime")
1. 所有模块第一次加载完毕后都会有缓存,二次加载直接读取缓存,避免了二次开销因为有缓存,所以模块中的代码只在第一次加载的时候执行一次
//无论是加载文件模块、第三方模块还是核心模块,只要模块被加载过一次,就被缓存起来了(再次加载时,先判断缓存:如若缓存有则直接拿到。若没有,则直接用加载过程)以后再用,直接从缓存中取。避免损耗。
2. 每次加载模块的时候都优先从缓存中加载,缓存中没有的情况下才会按照node.js 加载模块的规则去查找//再次加载时,先判断缓存:如若缓存有则直接取。若没有,则直接用加载过程。
3. 核心模块在Mode. js 源码编译的时候,都已经编译为二进制执行文件,所以加载速度较快(核心模块加载的优先级仅次于缓存加载)
4. 核心模块都保存在lib目录下 //核心模块在源代码的lib目录下(大多用js写)
5.试图加载一个和核心模块同名的自定义模块(第三方模块〉是不会成功的+自定义模块要么名字不要与核心模块同名
+要么使用路径的方式加载 //我们加载时,加载时我们创建的模块与此模块重名,此模块便不会通过模块名称加载上。只能写路径来加载,让它根据路径查找。相反,核心模块不要通过路径加载,直接写模块名称
6、核心模块只能通过模块名称来加载(错误示例:require('./http');这样是无法加载核心模块 http的)
7、require()加载模块使用﹒/相对路径时,相对路径是相对当前模块,不受执行node 命令的路径影响 //在进行文件读写时./表示当时启动node命令的路径,但是在require加载模块时,./表示的是当前所在js文件所在的目录。
8.建议加载文件模块的时候始终添加文件后缀名,不要省略。
//路径没有加后缀,怎么知道路径而不是自定义文件名?
因为只要是路径,就必须以相对或绝对路径开头,否则将被认为是模块名称