博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
require标识符分析
阅读量:6977 次
发布时间:2019-06-27

本文共 1365 字,大约阅读时间需要 4 分钟。

require('./a')
// 优先从缓存加载
// 由于 在 a 中已经加载过 b 了
// 所以这里不会重复加载
// 可以拿到其中的接口对象,但是不会重复执行里面的代码
// 这样做的目的是为了避免重复加载,提高模块加载效率
var fn = require('./b')
console.log(fn)
 
 
如果是非路径形式的模块标识
路径形式的模块:
./ 当前目录,不可省略
../ 上一级目录,不可省略
/xxx 几乎不用
d:/a/foo.js 几乎不用
首位的 / 在这里表示的是当前文件模块所属磁盘根路径
.js 后缀名可以省略
require('./foo.js')
核心模块的本质也是文件
核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了
require('fs')
require('http')
第三方模块
凡是第三方模块都必须通过 npm 来下载
使用的时候就可以通过 require('包名') 的方式来进行加载才可以使用
不可能有任何一个第三方包和核心模块的名字是一样的
既不是核心模块、也不是路径形式的模块
先找到当前文件所处目录中的 node_modules 目录
node_modules/art-template
node_modules/art-template/package.json 文件
node_modules/art-template/package.json 文件中的 main 属性
main 属性中就记录了 art-template 的入口模块
然后加载使用这个第三方包
实际上最终加载的还是文件
如果 package.json 文件不存在或者 main 指定的入口模块是也没有
则 node 会自动找该目录下的 index.js
也就是说 index.js 会作为一个默认备选项
 
如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找
如果上一级还没有,则继续往上上一级查找
。。。
如果直到当前磁盘根目录还找不到,最后报错:
can not find module xxx
var template = require('art-template')
注意:我们一个项目有且只有一个 node_modules,放在项目根目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包
不会出现有多个 node_modules
模块查找机制
优先从缓存加载
核心模块
路径形式的文件模块
第三方模块
node_modules/art-template/
node_modules/art-template/package.json
node_modules/art-template/package.json main
index.js 备选项
进入上一级目录找 node_modules
按照这个规则依次往上找,直到磁盘根目录还找不到,最后报错:Can not find moudle xxx
一个项目有且仅有一个 node_modules 而且是存放到项目的根目录
require('a')

转载于:https://www.cnblogs.com/lujieting/p/10434666.html

你可能感兴趣的文章
第 7 章 项目运作
查看>>
云端卫士架构师讲DDoS攻击的智能防御之道
查看>>
《算法基础:打开算法之门》一1.5 拓展阅读
查看>>
百度地图 ip查询 service
查看>>
MySQL5.6.16二进制源码安装详解及一键安装实现
查看>>
ARP(Accounting Resource Planning)项目感想
查看>>
Linux系统基础-管理之用户、权限管理
查看>>
20170507Linux七周二次课 io监控free ps 网络状态 抓包
查看>>
CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
查看>>
PHP下载/采集远程图片到本地
查看>>
关于PHP程序员技术职业生涯规划
查看>>
python requests返回的json对象用json.loads()时转为字典时编码变为了unicode
查看>>
各大浏览器 CSS3 和 HTML5 兼容速查表
查看>>
使用可信证书为windows RDP服务提供加密
查看>>
报错 org.springframework.beans.factory.BeanCreationException
查看>>
IOS分享扩展使用JS脚本
查看>>
Hibernate 的 session.load()使用方法
查看>>
$httpprovider指令中拦截器interceptors的使用介绍
查看>>
gulp插件之browser-sync安装报错
查看>>
mongodb 连接和备份
查看>>