Require.JS学习

黄良钵

分类: 程序开发 682 0

Require.JS学习

首先得把下载好的require.js文件链接到html文档中:

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

require.js加载完成后会到页面上查找script[data-main]的值,找到之后会加载data-main指定的js文件,main是入口文件 main.js可以省略.js后缀名

main.js

  1. console.log('main loading')
  2. // 同时加载js1/和js2文件也可以加载更多的js文件
  3. // 脚本加载完成后 会调用第二参数指定的回调函数
  4. // require.js会自动在head标签中注入script标签
  5. // require.js添加script标签带有async属性 
  6. // async属性会使浏览器同时开始异步js
  7. // 使用require.js可以很方便的的导入js文件 但是需要解决js文件中
  8. // 变量名 方法名与其他js文件中变量名方法名冲突的问题
  9. // 造成这个问题的原因
  10. // 浏览器端js存在共用的全局作用域 全局变量 方法名 有可能被覆盖掉
  11. // NodeJS中每一个js文件都是一个独立作用域 不存在共用的全局作用域
  12. // NodeJS的js文件是相互隔离的 js文件之间只能通过模块导出的方法相互使用
  13. require(['js1','js2','js3'],function(){
  14.      console.log('js/1,2,3已经加载完毕')
  15. var total = number1 + number2 + number3
  16.      console.log(total)
  17.      hello()
  18.      hello2()
  19.      hello3()
  20. })

require模块加载

require模块加载

 m.js
  1. // var number = 1
  2. // 全局作用域一直存在 除非页面关闭或跳转到其他页面含刷新
  3. //  全局作用域是页面级 而不是网站级的
  4. // define是require.js提供的模块定义函数
  5. // 在这个函数中可以定义模块 方法是 调用define 给它传一个参数
  6. // 模块的所有代码都写在这个函数中 模块代码在函数作用域中 不会干扰、污染全局作用域
  7. // 函数作用域存在的时间非常短 而且在外面无法得到
  8. // 函数作用域内部的内容 所以需要使用return将需要导出的内容返回到函数外部
  9. define(function(){
  10.     // 函数作用域 
  11.     // 调用函数时 代码执行到函数内部时创建的函数作用域
  12.     // 函数的代码执行完毕后 函数作用域会立刻销毁
  13.     // 函数作用域销毁时 函数内部定义的变量和函数都会销毁
  14.     var number = 1
  15.     var number2 = 2
  16.     var hello = function () {
  17.         alert('hello' + number)
  18.      }
  19.     //  return 将一个值返回给函数的调用者
  20.     //  return返回的值会跳出函数作用域
  21.     //  返回的值比函数作用域生存的时间长
  22.     return{
  23.         number1:number,
  24.         number2:number2,
  25.         hello:hello
  26.     }
  27. });
 m2.js
  1. // 让requireJS虚拟出来一个module module通过传
  2. // 参数的方式进入函数作用域
  3. define(['require','module'],function(require,module){
  4. var number1 = 1
  5. var number2 = 2
  6. var hello = function(){
  7.         console.log('hello wangBaoQiang')
  8.     }
  9. // 使用rrequire加载其它js模块
  10. var exports = require('exports')
  11. // 导出模块 requireJS中导出模块的方法
  12. // module.exports = {
  13. //     number1:number1,
  14. //     number2:number2,
  15. //     hello:hello
  16. // }
  17.     exports.number1 = number1
  18.     exports.number2 = number2
  19.     exports.hello = hello
  20. })

require配置

require配置

这里不同目录的require.js引入是这样的:

  1. <script data-main="./scripts/main" src="./libs/require.js"></script>

这是main.js

  1. // requireJS默认会把入口js(本例中的main.js)所在的文件夹
  2. // ./scripts/)的路径当做基本路径 当使用require加载其它的js文件时
  3. // 会把基本路径(./scripts/) + 模块名字 + .js作为模块js的完整路径
  4. // ./scripts/jquery.js
  5. // define('jquery',[],function(){
  6. //     return jQuery
  7. // })
  8. // 1. 模块名称
  9. // 2.依赖项 依赖项会在你定义的模块加载前加载
  10. // 3.函数作用域 你的模块代码所在位置
  11. // require(['../libs/jquery'],function($){
  12. //     alert($) 
  13. // })
  14. // CDN Content Distribute NetWorking 内容分布网络
  15. require.config({
  16.     // baseUrl指的是文件的基本路径
  17.     baseUrl:'libs',
  18.     paths:{
  19.         jquery:'jquery',
  20.         // jquery:'https://cdn.bootcss.com/jquery/3.2.1/jquery.min',
  21.         fullScreen:'jquery.fullScreen',
  22.         m:'../scripts/m'
  23.     },
  24.     // 为那些没有使用define()来声明依赖关系、
  25.     // 设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。
  26.     shim:{
  27.         // fullScreen:{
  28.         //     deps:['jquery'],
  29.         //     // exports:'fullScreena'
  30.         // }
  31.         fullScreen:['jquery']
  32.     }
  33. })
  34. require(['jquery','m','fullScreen'],function($,m,fullScreena){
  35.     console.log(fullScreena)
  36.   if($.support.fullscreen){
  37.       console.log('vvvvvvvv')
  38.         $('#fullscreen').click(function(e){
  39.             $('#content').fullScreen();
  40.             e.preventDefault();
  41.         });
  42.     }
  43. })

Require-css

Require-css

在使用require.js的时候,想要在其中设置css样式的话需要require-css插件,具体的实现方法和代码请点击下面的演示效果,按照上图的文件结构修改地址查看源代码。

演示效果

实践 - 工资计算器

使用上次做的工资计算器进行使用require.js修改。

只修改了工资总额的计算,其他的同理。

require改写工资计算器

main.js

  1. require(['jquery','gongzi'],function($,$$){
  2.     // $$计算工资数据
  3.     console.dir($$)
  4.     $('button').click(function(){
  5.         var jishu = $('#jishu').val(),
  6.              jixiao = $('#jixiao').val(),
  7.              jiangjin = $('#jiangjin').val()
  8.           jishu = parseFloat(jishu) || 0
  9.           jixiao = parseFloat(jixiao) || 0
  10.           jiangjin= parseFloat(jiangjin) || 0
  11.           var data = $$.calc(jishu,jixiao,jiangjin)
  12.           console.log(data)
  13.           $('#zonge').text(data.total.toFixed(2))
  14.           $('section').slideDown()
  15.     })
  16.     // 监听form表单的input事件 当用户输入时 隐藏计算结果
  17.     $('form').on('input',function(){
  18.         $('section').fadeOut()
  19.     })
  20. })

gongzi.js

  1. // 定义一个工资计算模块
  2. // 这个模块导出一个函数 这个函数接受三个参数
  3. // 分别表示基本工资  绩效工资  奖金
  4. // 通过计算返回一个对象
  5. // requireJS定义模块的步骤
  6. // 1.写一个define函数调用
  7. // 2.在define中写一个函数作用域
  8. // 3. 在函数作用域写代码
  9. // 4. 将指定的内容导出
  10. // define(function(){
  11. //     function calc(jishu,jixiao,jiangjin){
  12. //         // 工资总额
  13. //         var  total = jishu + jixiao + jiangjin
  14. //         return {
  15. //             total:total
  16. //         }
  17. //     }
  18. //     return calc
  19. // })
  20. // define(['module'],function(module){
  21. //      function calc(jishu,jixiao,jiangjin){
  22. //         // 工资总额
  23. //         var  total = jishu + jixiao + jiangjin
  24. //         // 其它计算数据
  25. //         return {
  26. //             total:total
  27. //         }
  28. //     }
  29. //     module.exports = calc
  30. // })
  31. define(['exports'],function(exports){
  32. function calc(jishu,jixiao,jiangjin){
  33. // 工资总额
  34. var  total = jishu + jixiao + jiangjin
  35. // 其它计算数据
  36. return {
  37.             total:total
  38.         }
  39.     }
  40. // 直接给exports赋值是不能导出的
  41. // exports = calc
  42. // 使用exports只能以属性的方式导出内容
  43.       exports.calc = calc
  44. })

查看其他源代码请点击 效果演示

  • 0人 Love
  • 0人 Haha
  • 0人 Wow
  • 0人 Sad
  • 0人 Angry
require、Require-css、require模块加载、require配置

作者简介: 黄良钵

打赏

博客站长,前端开发工程师

共 0 条评论关于 “Require.JS学习”

Loading...