手写require 继上一篇 深入
- node中js文件就是一个模块
- 为什么出现模块的概念 防止命名冲突、可以把同样的功能封装到一起
- esModule commonjs规范(一个文件是一个模块,module.exports导出给别人使用,require来引用别人的模块)
新建 a.json
1 | { |
b.js
1 | module.exports = 'hello'; |
手写require模块
1 | // node模块会按照后缀名查找.js文件是否存在,再查找.json文件 |
- node中的模块分3类 文件模块 第三方模块(需要安装) 内置模块 fs path…
- 模块的查找路径:
现在查找的是b.js,如果有一个b的文件夹 ,先查找文件,找不到再找文件夹 - 第三方模块查找:
比如说:require(‘commander’); 他会找当前文件夹下的node_modules,再找同名的文件(commander),如果有package.json下{main:’xxx’},那就会找入口文件main对应的文件,再找index.js,再找index.json,找不到会向上级的node_modules查找,直到根目录,根目录也找不到就报错;