跳到主要内容

require方法加载规则

  • 优先从缓存中加载

    • 如果文件已经加载过了,再次执行的时候,不会重新加载 (已经缓冲了)
    • 可以拿到其中的接口对象(从缓冲当中拿到接口对象),但是不会重复执行里面的代码
    • 这样做的目的是为了避免重复加载,提高模块的加载效率
  • 判断模块标识

    • require('模块标识')

      • 核心模块

      • 第三方模块(如art-template)

        1、先找到当前文件所处目录中的node_modules目录

        2、node_modules/art-template

        3、node_modules/art-template/package.json文件

        • package.json叫包描述文件

        4、node_modules/art-template/package.json文件中的main属性

        5、main属性中就记录了art-template的入口模块

        6、然后加载使用这个第三方包

        7、实际上最终加载的还是文件

        8、如果package.json文件不存在或者main指定的入口模块也没有

        • 则node会自动找该目录下的index.js
        • 也就是说index.js会作为默认备选项

        9、如果以上所有任何一个条件都不成立,则会进入上一级目录中的node_mudules目录查找

        • 如果上一级还没有,则继续往上一级查找node_mudules

        • 如果直到当前磁盘根目录还找不到,最后会报错

          can not find module xxx

        10、当然,我们一个项目有且只有一个node_modules,放在项目根目录中,这样的话项目的子目录都可以加载到第三方包

        • 不会出现多个node_mudules
      • 自己写的模块

        • 文件路径

        • 路径形式的模块

          ./ (当前目录下)

          ../ (上级目录)

          /xxx (绝对路径很少用,因为依赖于磁盘根路径)

          / (首位的/表示的是当前文件模块所属磁盘根路径)

    • 核心模块的本质也是文件

    • 核心模块文件已经被编译到了二进制文件中了,只需要安装加载模块对应的名字就可以了

require 加载模块的时候是同步还是异步​

CommonJS 规范​

node使用的是 CommonJS 规范

  • nodejs的require是同步!
  • require('name')同步加载模块的形式

requirejs​

RequireJS 是一个 js 文件和模块加载器。它非常适合在浏览器中使用,但它也可以用在其他 js 环境,它解决了 CommonJS 规范不能用于浏览器端的问题

注意 requirejs可以异步也可以同步,需要导包

  • requirejs(['name1', 'name2'],callback)异步加载模块的形式

require支持加载的资源类型​

  • 支持的资源类型有:js、json、node、any【任何类型文件->会通过js引擎【当作js代码】来解析】
  • .js => module.exports / exports
  • .json =>JSON.parse
  • .node => process.dlopen 【调用c++插件】基本用不上