yunyu950908 / JS-Notes

jrg-task
0 stars 0 forks source link

AMD_CMD_RequireJS #22

Open yunyu950908 opened 7 years ago

yunyu950908 commented 7 years ago

题目1: 为什么要使用模块化?

yunyu950908 commented 7 years ago

题目2: CMD、AMD、CommonJS 规范分别指什么?有哪些应用

这三个规范都是为javascript模块化加载而生的,都是在用到或者预计要用到某些模块时候加载该模块,使得大量的系统巨大的庞杂的代码得以很好的组织和管理。模块化使得我们在使用和管理代码的时候不那么混乱,而且也方便了多人的合作。

CommonJS

Node 端加载。是同步加载。

//模块定义 a.js
var people = {
  name: 'frankie',
  sayName: function(){
    console.log(this.name)
  }
}

module.exports = people
//module.exports = 123

//加载模块
var p = require('./a')
//console.log(p)
p.sayName()

AMD (Asynchronous Module Definition, 异步模块定义)

指定一种机制,在该机制下模块和依赖可以异步加载。这对浏览器端的异步加载尤其适用。

//语法
//定义模块
define(id?,dependencies?,factory)
//id:可选函数,用来定义模块标识,如果没写就用文件名。
//denpendencies:可选函数,当前模块的依赖的模块,可用数组
//factory:执行函数或者对象,通常为函数
//加载模块
require([dependencies],function)
//dependencies:当前模块需要的依赖的模块
//function:回调函数,在模块加载完了后,会被执行。
//例子1
//先看一个简单的例子。
var modal = require('modal')
$btn.on('click',function(){
  madal.open()
})
//使用 AMD 规范。
define('modal',['jQuery','dialog'],function($,Dialog){
  $('.modal').show()
  Dialog.open()
})
//例子2
//设有模块 carousel,tab,lazy
//加载模块可以这样写
require(['carousel','tab','lazy'],function(carousel,tab,lazy){
  new Carousel()
  Tab.init()
  Lazy.init()

CMD(Common Module Definition)通用模板定义

它是在一个浏览器端模块化的开发规范

})

yunyu950908 commented 7 years ago

题目3: 使用 requirejs 完善入门任务15,包括如下功能:

  1. 首屏大图为全屏轮播
  2. 有回到顶部功能
  3. 图片区使用瀑布流布局(图片高度不一),下部有加载更多按钮,点击加载更多会加载更多数据(数据在后端 mock)
  4. 使用 r.js 打包应用
yunyu950908 commented 7 years ago

RequireJs 相关:

<script src="./js/lib/require.js" data-main="./js/main.js"></script>

      'underscore':{         exports: '_'       },       'backbone': {         deps: ['underscore', 'jquery'],         exports: 'Backbone'       }     }   });


- **main.js(主程序入口)**

requirejs.config({ baseUrl: './js', paths: { jquery: './lib/jquery-3.2.1.min' } })

requirejs(['./app/app'])

- **app.js(引用的 JS 模块)**

// CMD 规范: define(function(require,exports,module){ var blue = require('com/blue') var yellow = require('com/yellow') var green = require('com/green') blue() yellow() green() })

// AMD 规范 define(['jquery','com/blue','com/green','com/yellow'],function($,blue,green,yellow){ blue() green() yellow() })

- **组件部分**
  - 模块组件一定要 return 出来

define(['jquery'],function($){ function turnGreen(){ $('.btn2').on('click',function(){ $('.box').css('background-color','green') }) }

return turnGreen

})

yunyu950908 commented 7 years ago

r.js 打包