前端模块化require.js

早期JS代码都会写在一个文件中,仅需加载一个文件即可。后来代码越来越多,必须分割成多个文件,依次加载。问题是这种加载的方式,浏览器会停止页面渲染,加载文件越多,网页失去响应的时间越长。另外JS文件之间存在依赖关系,必须严格保证加载顺序。当依赖关系非常复杂的时候,代码的编写和维护变得异常困难。

RequireJS的诞生是为了解决这两个问题:

  • 实现JS文件的异步加载避免页面失去响应
  • 管理模块之间的依赖关系,便于代码编写和维护。

加载资源文件

<script src="https://cdn.bootcss.com/require.js/2.3.5/require.js"></script>

如何定义一个模块:
1.模块是单独的js文件
2.每个模块都有自己独立的作用域  函数
3.定义模块语法:

define('模块名称', [依赖项], function () {
  //模块功能
  var obj = {
    name:'mike',
    sayHi: function () {
      console.log('hello world my name is '+this.name)
    }
  }
  return obj;
})

4.模块名称一般省略(匿名模块)
5.依赖项是指当前模块依赖的模块,如果没有就省略
6.导出项:模块需要暴露给外界的数据,用return返回即可,引入模块时,在回调函数的参数列表中设置形参接收

如何引入模块

require(['./js/a'], function(res) {
  res.sayHi()
})

模块化导出的优势
与沙箱相比,沙箱将数据暴露给了全局window对象,而模块将数据暴露给了另一个函数,避免了全局污染

引入多个模块
引入多个模块,形参必须和模块的顺序一一对应

require(['./js/a','./js/b','./js/c'],function(res_a,res_b,res_c){

}) 

路径配置
当模块的路径比较复杂的时候,我们可以使用路径配置,整个网站只需要配置一次,引入模块时直接使用别名,
配置路径时最好使用绝对路径

require.config({
  baseUrl:'/myProject/js/one/two/three/',//基础路径
  //起别名:给复杂的路径起一个别名
  //别名 = baseUrl + 别名对应的路径
  path:{
    a:'four/five/a.js',
    b:'six/b.js'
  }
})
require([a,b],function(res_a,res_b){

})

 

posted @ 2020-09-03 12:17  MIKE-CHOW  阅读(173)  评论(0)    收藏  举报