Node中的require

試著忘記壹切 提交于 2020-01-21 14:10:29

Require

require作用:

  1. 加载执行模块文件的代码
  2. 返回模块的exports对象
//导出模块
exports.abc = 'hello'
//导入模块
var a = require('./a')
console.log(a)
//{ abc: 'hello' }

加载规则:

  1. 优先从缓存中加载
    例如有三个文件main.js ,a.js ,b.js
//main.js
require('./a')
var b = require('./b')
console.log(b)
//a.js
console.log('aaa')
require('./b')
//b.js
console.log('bbb')
exports.b = 'bbb'

执行node main.js结果为

aaa
bbb
{b:'bbb'}

在a.js中已经加载过b.js文件,所以main.js再加载b.js的时候就不会打印bbb了
但main.js中可以得到b.js导出的exports对象

目的是为了避免模块重复加载,提高模块的加载效率

  1. 判断模块标识符
  • 路径形式的模块标识符 require(’./a’)

    • 参数以‘/’开头,表示加载位于绝对路径的模块文件
    • 参数以’./'开头,表示加载位于相对路径(跟当前执行脚本的位置相比)的模块文件
  • 核心模块 require(‘http’)

    • 表示加载默认提供的核心模块
  • 第三方模块 require(‘express’)

    • 找到node_modules中当前加载模块(如express)的package.json文件,然后加载main字段指定的入口文件
    • 如果package.json文件中没有main字段,或者package.json文件不存在,则会加载该模块目录下的index.js
    • 如果以上都不存在,则会逐级向上一层目录的node_modules中查找
    • 直到找不到该模块,报错:can not find module xxx
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!