node require 导入模块解析 加载规则和加载机制

  • requre 加载规则和加载机制
    • 核心模块 require(“模块名”)

    • 第三方模块 require(“模块名”)

    • 自定义模块 require(“模块路径”) ;
      //一定要写 ./ 不然会被认为是核心模块 然后找不到报错

      • 优先加载缓存数据
        	main.js
        				
        	require("./a")
        	var b = require("./b")
        	
        	a.js 
        	
        	console.log("a.js loading")
        	var b = require("./b")
        	
        	b.js 
        	
        	console.log("b.js loading")
        	module.exports = "bljs"
        	
        	运行main.js
        	
        	打印
        		a.js loading
        		b.js loading
        	```
        	
        由于 a.js 已经加载了 b.js,所以 main.js 不会重复加载b.js,
        是为了避免重复加载,提高模块加载效率
        main.js 的 require("./b")只是为了获取 b.js 导出的结构
        
        
      • 判断模块标识 require(“模块标识”)

        • 路径形式模块
          以 ./ 单前目录不可省
          …/ 上一级目录不可省
          /xxx(几乎不用)
          首位的 / 在这里表示的是当前文件模块所属磁盘根目录
          .js 后缀名可省
          require("./foo")

        • 核心模块
          核心模块文件已经被编译到了二进制文件中了,我们只需要按名字加载就行了
          require(“fs”)

        • 第三方模块

          • 不可能有如何一个第三方和核心模块名字是一样的

          • 凡是第三方模块都必须通过 npm 来下载 使用时 require(“模块名”)
            找 node_modules/模块名/package.json 文件
            在找 json 文件中的 main 属性 记录了当前模块的入口模块

          • 可以测试
            在 node_modules 下新建 csA 文件夹
            csA 下新建 package.json {“main”:“index.js”}
            下新建 index.js
            console.log(“csA 加载了”)
            module.exports = “测试 csA”
            在 node_modules 同级目录下创建 app.js
            var csA = require(“csA”)
            console.log(csA)
            运行 app.js
            node app.js

          • 如果 package.json 不存在 或 main指定入口也没有
            则 node 会自动找该目录下的 index.js,index.js 会作为默认备选项

          • 如果 以上条件不成立
            则会进入上一级目录的 node_modules 目录查找 模块 在没有 ,在往上上一级,…
            直至磁盘根目录,还没找到 会报错
            can not find module xxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值