说说nodejs中require的原理
# 模块是什么?
在nodejs中每一个文件都是一个模块,默认含有2个属性,module和require
# 示例
function add (x,y){
return x+y
}
console.log(module)
console.log(require)
# module
提示
有exports属性
Module {
id: '.',
path: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src',
exports: {},
parent: null,
filename: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/test.js',
loaded: false,
children: [],
paths: [
'/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/github/app-node/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/github/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/node_modules',
'/Users/fangzhiqing/Desktop/node_modules',
'/Users/fangzhiqing/node_modules',
'/Users/node_modules',
'/node_modules'
]
}
# require
有cache属性,缓存模块
[Function: require] {
resolve: [Function: resolve] { paths: [Function: paths] },
main: Module {
id: '.',
path: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src',
exports: {},
parent: null,
filename: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/test.js',
loaded: false,
children: [],
paths: [
'/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/github/app-node/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/github/node_modules',
'/Users/fangzhiqing/Desktop/fangdown/node_modules',
'/Users/fangzhiqing/Desktop/node_modules',
'/Users/fangzhiqing/node_modules',
'/Users/node_modules',
'/node_modules'
]
},
extensions: [Object: null prototype] {
'.js': [Function],
'.json': [Function],
'.node': [Function]
},
cache: [Object: null prototype] {
'/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/test.js': Module {
id: '.',
path: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src',
exports: {},
parent: null,
filename: '/Users/fangzhiqing/Desktop/fangdown/github/app-node/src/test.js',
loaded: false,
children: [],
paths: [Array]
}
}
}
# 模块载入和缓存机制
- 加载内置模块
- 加载文件模块
- 加载文件目录模块
- 加载node_modules里的模块
- 自动缓存已载入的模块(优先)
# 文件定位
没有扩展名,会按.js ---> .json ---> .node的顺序补足扩展名,依次尝试
上次更新: 2021/12/19, 18:05:42