Node--1.模块化

通过B站,老陈打码2020最新最全Node实战课程(含爬虫和web服务器开发)
进行学习

一、模块的导出和导入

1. require

  • 用于: 用来在一个模块中引入另外一个模块。

  • 用法: 模块名可以用绝对路径也可以用相对路径,模块的后缀名.js可以省略。

let a = require('./index1');
let b = require('nodeStudy/src/index1');
let c = require('./index1.js');
  • 作用:
  1. 执行导入的模块中的代码 (只会执行一次:多次导入,一次执行)
  2. 返回导入模块的 接口对象
  • 注意:

在没有任何内容导出去的情况下,获取某个文件的内容,会得到一个空对象{}

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. exportsmodule.exports的不同

  1. 系统默认设置了:exports = module.exports,即exports指向module.exports
  2. 系统只会读取modeul.exports的内容,一切以module.exports为准
  3. 使用exports时,只能单个设置属性 exports.a = a
  4. 使用module.exports可以单个设置属性,也可以整个赋值

二、模块的初始化

一个模块中的JS代码仅在模块第一次被使用时执行一次,并且在使用的过程中进行初始化,之后缓存起来便于后续继续使用。

比如:

导入模块有一个 console.log()

在导入模块有两个 require,那么只会console.log()一次

三、主模块

  • 含义: 通过命令行参数传递给NodeJS以启动程序的模块被称为主模块
  • 作用: 主模块负责调度组成整个程序的其它模块完成工作
  • 实例:

当我们在使用vue、axios时,通常都会有一个启动的主文件,例如vue的main.js,axios的request.js,通常这类文件,就是主入口,也是主模块

四、require加载第三方包的步骤

通过npm下载的第三方包,都是通过let xx = require('第三方包'),接下来是原理步骤

  1. require('第三方包名')优先在加载该包的模块的同级目录node_modules中查找第三方包。

Node--1.模块化_第1张图片

  1. 找到该第三方包中的package.json文件,并且找到里面的main属性对应的入口模块,该入口模块即为加载的第三方模块

Node--1.模块化_第2张图片

  1. 如果在要加载的第三方包中没有找到package.json文件或者是package.json文件中没有main属性,则默认加载第三方包中的index.js文件。

  2. 如果在加载第三方模块的文件的同级目录没有找到node_modules文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找node_modules文件夹,查找规则如上一致。

  3. 如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx

你可能感兴趣的:(node)