nodeJs-require函数详解
前言个人理解:我将require分为2类的原则是,该字符串中是否含有路径。如以下示例1、无路径(也称为加载模块):require('find')2、有路径(也称为加载文件):require('./find.js')加载模块例子:require('find')1、node会先查找find模块是否是内置模块(nodejs内置的模块有fs、http等),找不到则进行下一步2、从当前目录向外寻找node_
·
前言
个人理解:我将require分为2类的原则是,该字符串中是否含有路径。如以下示例
1、无路径(也称为加载模块):require('find')
2、有路径(也称为加载文件):require('./find.js')
加载模块
例子:require('find')
1、node会先查找find模块是否是内置模块(nodejs内置的模块有fs、http等),找不到则进行下一步
2、从当前目录向外寻找node_moludes查找是否有find.js文件,找不到进行下一步;
3、在node_moludes中找find文件夹,寻找index.js文件;
4、没有index.js文件,则去package.json中查找main字段,该字段对应于一个入口路径;
5、以上都找不到,报错。
加载文件
例子:require('./find')
1、node会先找当前目录下的find.js文件;
2、进而寻找find.json文件;
3、寻找当前目录下的find文件夹的index.js
4、没有index.js文件,则去package.json中查找main字段,该字段对应于一个入口路径;
5、以上都找不到,报错。
require函数性质
require函数是一种运行时同步加载的机制(拷贝该文件),当node加载该文件后,会有一个require.cache函数对该文件进行缓存,即
let a = require('./find.js')
let b = require('./find.js')
console.log(a==b)
这是因为a、b都指向了该缓存文件,且该文件只会加载一次,后续的加载文件会先在缓存中先进行查找,如果有的话,则直接使用,没有的话,则按上面的查找规则进行加载文件。
node热更新
用过node的人应该知道,当我们保存文件时,并不会自动更新代码,其本质因为node加载有缓存文件的原因,而要使用node热更新可以用nodemon,保存即重新运行。
总结
1、react中我们常用文件夹+index.jsx形式去创建组件,其原因就是webpack是基于nodejs的,而nodejs有着上面的加载机制;
2、加载文件时,为了提高性能,应将文件路径写清楚,避免多次查找;
3、node没有热更新,本质原因是require有缓存机制;
参考文献
更多推荐
已为社区贡献1条内容
所有评论(0)