1 背景

  伴随着项目功能的不断扩充,客户体验的不断完善,实现交互逻辑的JS代码变得越来越多。起初,为了管理JS代码,我们把JS从页面中解放出来独立成文件,接着又把相似的交互代码提取到公共的JS页面中。然而这还不够,一个团队在编写JS交互逻辑时,往往会出现"命名冲突"的问题。于是乎,我们想到了闭包,并将每个JS文件都用闭包封装起来,形成一个个独立的作用域,如果有必要,还会返回一个对象接口供外界调用。走到这一步,JS中的命名问题、全局变量问题都可以完美解决,但还存在一个相互依赖的大问题。特别是引入大量JS文件时,经常会因为文件之间的依赖关系而抛错。引入JS框架RequireJS,可以让JS更规范,并解决上述遇到的一系列问题。

2 认识RequireJS

  RequireJS是一个JavaScript模块加载器,使用RequireJS加载模块化脚本将提高代码的加载速度和质量,RequireJS兼容IE 6+、Firefox 2+、Safari 3.2+、Chrome 3+、Opera 10+。

  RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>的脚本加载步骤。可以用它来1.加速和优化代码,但它的主要目的还是为了2.代码的模块化。它鼓励在使用脚本时用module ID代替URL地址。

  RequireJS以一个相对于baseUrl的地址来加载所有代码。页面顶层<script>标签含有一个特殊的属性data-main,RequireJS使用它来启动脚本加载过程。

  baseUrl设置方式:一般1.是与data-main属性相一致的目录,也可2.通过RequireJS config来手动配置,如果没有显示指定data-main或者config,则3.默认baseUrl为包含RequireJS的html文件所在目录

  例如:<script data-main="js/main.js" src="lib/require.js"></script>,通过data-main设置了入口,并会加载js目录下module ID为require的脚本,baseUrl则为js目录。

  RequireJS默认假定所依赖的资源都是js脚本,所以无需在module ID上加.js后缀。可以通过paths config设置一组脚本,可以有助于我们在使用脚本时码更少的字。

  如果想避开"baseUrl+paths"的解析过程,而是直接加载某一目录下的脚本,则module ID需满足以下规则之一:(1)带.js后缀 (2)以/开头 (3)包含URL协议如:'http:'或'https:'

  一般来说,最好还是使用baseUrl和"paths" config去设置module ID,它会带来额外带来灵活性:脚本的重命名和重定位。同时,为了避免凌乱的配置,最好不要使用多级嵌套的目录层次结构来组织代码,而是要将所有的脚本都放到baseUrl中,要么分为项目库/第三方库的扁平结构

前端JS框架系列之requireJS基础学习的更多相关文章

  1. 前端Js框架汇总

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  2. 前端Js框架 UI框架汇总 特性 适用范围 选择

    身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...

  3. 前端Js框架汇总【转】

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  4. 前端Js框架汇总(工具多看)

    前端Js框架汇总(工具多看) 一.总结 一句话总结: 二.前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领 ...

  5. Vue 浅谈前端js框架vue

    Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...

  6. 比较实用的前端 js框架 ,组件 汇总

    一.js 前端ui框架 Kendo UI 商用收费,组件丰富,界面简洁美观,有jQuery和angular两个js的版本 Webix 商用收费,组件丰富,界面特别美观 JQwidgets 商用收费,丰 ...

  7. 八款你不得不知的开源前端JS框架

    angular.js Angular.JS是一个开源的JavaScript框架,最适于开发客户端的单页面应用.它实现了前端MVC架构,专注于扩展HTML功能,提供动态数据绑定(Data Binding ...

  8. 【领会要领】web前端-轻量级框架应用(jQuery基础)

    作者 | Jeskson 来源 | 达达前端小酒馆 jquery的安装和语法,jquery的多种选择器,dom操作和jquery事件. jQuery框架,简介,优势,安装,语法,jQuery选择器,i ...

  9. 前端js框架引入管理bundle.js

    最先在ionic中看到bundle.js,,,然而它不是一个框架

随机推荐

  1. C++调用函数模仿数字钟表

    调用系统函数,可以得到系统时间 #include<iostream> #include<windows.h> #include<time.h> using name ...

  2. [DeeplearningAI笔记]序列模型2.10词嵌入除偏

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.10词嵌入除偏 Debiasing word embeddings Bolukbasi T, Chang K W, Zo ...

  3. C/C++预处理宏的总结

    1.定义顺序的无关性 #define PI 3.14 #define TWO_PI  2*PI 这两句谁前谁后无所谓,因为预处理器不断迭代来实现宏替换,直到源文件中没有宏了才停止. 2. 宏变量变成字 ...

  4. WdatePicker日历控件动态设置属性参数值

    首先吐槽一下需求人员给了我一个很坑的需求:WdatePicker日历控件里面选择的最小时间(minDate)的值是级联动态改变的,而且这个值要从数据库获取,这样子只能使用 ajax 来发起请求获取mi ...

  5. leetcode 刷题日志 2018-03-26

    58. 最后一个单词的长度 分析:找最后一个非空格,向前找 int lengthOfLastWord(string s) { int i = s.find_last_not_of(' '); int ...

  6. C11线程管理:互斥锁

    1.概述 锁类型 c11提供了跨平台的线程同步手段,用来保护多线程同时访问的共享数据. std::mutex,最基本的 Mutex 类,独占的互斥量,不能递归使用. std::time_mutex,带 ...

  7. CSS 定位相关属性 :position

    我们平时经常用margin来进行布局,但是遇到一些盒子不规律布局时,用margin就有点麻烦了,这个时候我们可以用position. position:参数 参数分析: 一.absolute: 相对父 ...

  8. 【CodeForces】914 E. Palindromes in a Tree 点分治

    [题目]E. Palindromes in a Tree [题意]给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数.n<=2 ...

  9. 【BZOJ】4316: 小C的独立集 静态仙人掌

    [题意]给定仙人掌图,求最大独立集(选择最大的点集使得点间无连边).n<=50000,m<=60000. [算法]DFS处理仙人掌图 [题解]参考:[BZOJ]1023: [SHOI200 ...

  10. Java 中的几种线程池这么用才是对的

    为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下.其实归根结底最主要的一个原因就是为了提高性能. 线程池和数据库连接池是同样的道理,数据库连接池是为了减少连接建立和释放带来的性能开销.而线 ...