通过B站,老陈打码2020最新最全Node实战课程(含爬虫和web服务器开发)
进行学习
一、模块的导出和导入
1. require
-
用于: 用来在一个模块中引入另外一个模块。
-
用法: 模块名可以用绝对路径也可以用相对路径,模块的后缀名.js可以省略。
let a = require('./index1');
let b = require('nodeStudy/src/index1');
let c = require('./index1.js');
- 作用:
- 执行导入的模块中的代码 (只会执行一次:多次导入,一次执行)
- 返回导入模块的 接口对象
- 注意:
在没有任何内容导出去的情况下,获取某个文件的内容,会得到一个空对象{}
2. exports
-
用于: 导出当前模块的公共方法或属性
-
用法:
exports.name
, (name为导出的对象名)
var a = 1;
// exports就是默认导出的对象
exports.a = a;
exports.add = function () {
let i = 0
console.log(++i)
}
3. module.exports
- 用于: 导出一个默认对象,没有指定对象名,常见于修改模块的原始导出对象
- 用法:
module.exports = function () {
console.log('hello world!')
}
4. exports
和module.exports
的不同
- 系统默认设置了:
exports
=module.exports
,即exports
指向module.exports
- 系统只会读取
modeul.exports
的内容,一切以module.exports
为准 - 使用
exports
时,只能单个设置属性exports.a = a
- 使用
module.exports
可以单个设置属性,也可以整个赋值
二、模块的初始化
一个模块中的JS代码仅在模块第一次被使用时执行一次,并且在使用的过程中进行初始化,之后缓存起来便于后续继续使用。
比如:
导入模块有一个 console.log()
在导入模块有两个 require
,那么只会console.log()
一次
三、主模块
- 含义: 通过命令行参数传递给NodeJS以启动程序的模块被称为主模块
- 作用: 主模块负责调度组成整个程序的其它模块完成工作
- 实例:
当我们在使用vue、axios时,通常都会有一个启动的主文件,例如vue的main.js
,axios的request.js
,通常这类文件,就是主入口,也是主模块
四、require
加载第三方包的步骤
通过npm
下载的第三方包,都是通过let xx = require('第三方包')
,接下来是原理步骤
require('第三方包名')
优先在加载该包的模块的同级目录node_modules
中查找第三方包。
- 找到该第三方包中的
package.json
文件,并且找到里面的main
属性对应的入口模块,该入口模块即为加载的第三方模块
-
如果在要加载的第三方包中没有找到
package.json
文件或者是package.json
文件中没有main
属性,则默认加载第三方包中的index.js
文件。 -
如果在加载第三方模块的文件的同级目录没有找到
node_modules
文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找node_modules
文件夹,查找规则如上一致。 -
如果一直找到该模块的磁盘根路径都没有找到,则会报错:
can not find module xxx
。