我们用模块化的思想进行网页的编写是为了更好的管理我们的项目

模块与模块之间是独立存在的,每个模块可以独立的完成一个子功能。

模块化所涉及的规范commonjs,AMD,CMD,UMD

其中的commonjs是服务器规范,用到的是同步加载,适用于nodejs后台的操作

由于commonjs的特性是同步加载,并不适用于前端,人们想解决前端异步加载的问题,AMD就应运而生了。

AMD将commonjs的思想全部推翻,产生了一套新的规范,它是专门为前端定制的规范,实现了异步加载。

CMD和AMD的区别是可以实现按需加载。

UMD则是commonjs和AMD的结合。

requirejs遵循的是AMD规范

requirejs:

require.js提供两种加载(前置加载:2.0以前的版本使用,按需加载(异步加载,2.0以后的版本))

requirejs的引入:

页面只需要插入一个script标签:
    <script src="js/requirejs_module/require.min.js"  data-main="js/require-main"></script>
    上面的data-main是用来加载配置文件的。

//require-main的配置如下:
    require.config({
        paths:{
            "m1":"js/js-module/m1",
            "m2":"js/js-module/m2",
            "my":"js/js-module/me
        shim:{
            "my":{export:"myFunc"}
            }//shim是为不支持AMD的js文件提供的方法(尽量不适用此方法,应该讲js文件进行改造)
    })    //paths用来配置所有路径

模块的定义:(define关键字)
    define(function(){
    })
    define(["module2"],function(m2){ })

定义的模块可在其他模块的内部加载
    define(function(require,exports,module){
        var m2=require("module2");//内部加载模块"module2"
            m2.func2
    })

模块的加载方法如下:

require(["m1"],function(m1){
        var fun1=function(){
        }
        var fun2=function(){
        }
            return{fun1:fun1,fun2:fun2
    }

//模块的前置加载
    require(["fun1,fun2"],function(m1,m2){})

seajs:

1.sea.js的导入
    <script src="js/seajs_modules/sea.js"></script>//官网中提供的js文件
    <script src="js/seajs_config.js"></script>//自己建立的配置路径

配置路径中:
    seajs_config.js代码如下:
    
    seajs.config({
    base:".", //指定根路径
    alias:{
        "jquery":"js/seajs_modules/jquery-1.11.2-min",//导入的jQuery文件
        "bootstrap":"js/seajs_modules/bootstrap.min",//导入的框架
        "reg":"js/modules/reg/reg",//要进行模块化配置的页面
        "login":"js/modules/login/login",
        "student":"js/modules/student/register"
    }    //alias别名
    });

使用:
    seajs.use("reg",function(reg){
        reg.load();
    });

seajs中模块的定义:

模块的定义:(关键字:define)
    define(function(require){
    var $=require("jquery");//加载jQuery
    var load=function(){
        $("#content").load("js/modules/login/login.html",function(){
            。。。。。。
        });//在content里面加载页面login.html

};
    return{load:load}//定义的模块中返回的方法
    });

引入的第三方插件要进行改造:

第三方插件改造:
    jQuery改造:
    在js代码外面包裹:
    define(function(){
        。。。。。。
        return $.noconflict();

})

上面的return $.noconflict():运行这个函数将变量$的控制权让渡给第一个实现它的那个库(这有助于确保jQuery不会与其他库的$对象发生冲突。 在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。 '''注意:'''这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库'''之前'''使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。

bootstrap改造:
    define(function(require,exports,module){
        return function($){
        ......js内容区.......
    }})

模块化实现的都是单页面应用。

模块化以及requirejs和seajs的更多相关文章

  1. RequireJS与SeaJS模块化加载示例

    web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...

  2. RequireJS和seaJS的区别与联系

    RequireJS和seaJS的区别与联系联系:都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然.              RequireJS(除了是 ...

  3. 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs

    [前端神秘的面纱] 对后端开发来说,前端是神秘的, 眼花缭乱的技术,繁多的框架, 如果你还停留在前端等于只用jquery做开发,那么你out了, 本文从Java的角度简述下目前前端流行的一些框架. 水 ...

  4. LABjs、RequireJS、SeaJS 哪个最好用?为什么?

    感谢玉伯在知乎的奉献,下面全文转载:http://www.zhihu.com/question/20342350/answer/14828786 LABjs 的核心是 LAB(Loading and ...

  5. LABjs、RequireJS、SeaJS 哪个最好用?为什么?- 玉伯的回答

    LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行.LABjs 通过优雅的语法(script 和 wait)实 ...

  6. requirejs和seajs使用感受

    这几天看了下前端模块化的知识,主要是requirejs和seajs相关的知识,还未看es6的模块化知识. 由于目前项目组内的开始推广使用vue,并且开始简单的封装组件,但发现组件js的使用方式依然是原 ...

  7. RequireJS 与 SeaJS 的异同

    相同之处 RequireJS 和 SeaJS 都是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然. 不同之处 两者的区别如下: 定位有差异.Re ...

  8. JavaScript 从入门到放弃(二)模块化工具requirejs

    入门教程: 1.JS模块化工具requirejs教程(一):初识requirejs 2.JS模块化工具requirejs教程(二):基本知识 描述 这几天在使用github最活跃的基于bootstra ...

  9. 【转】JS模块化工具requirejs教程(二):基本知识

    前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...

随机推荐

  1. System.Data.SqlClient.SqlError:无法对过程'XXX' 执行 删除,因为它正用于复制。消息 3724,级别 16

    遇到这么一个错误,想对[northwindcs]这个数据库搭建复制,从B服务器发布订阅到C服务器,采用备份还原进行初始化,但是在数据库还原时,报无法对过程‘XXX’执行删除,因为它正用于复制.表面上一 ...

  2. 数字图像处理作业使用OpenCV - 自定义直方图

    第二次作业需要打印出来灰度直方图,当然不能使用ocv的自带calcHist函数来得到Mat对象了……结果上网搜索怎么用自己的数据创建直方图,搜到的都是直接用函数的_(:з」∠)_ 结果这个地方拖了好久 ...

  3. MyBatis总结(一)

    一.创建测试项目工程 二.导包(一个myBatis所需的包,以及一个数据库操作的包) 三.创建实体类 四.配置文件的建立(最佳命名为(SqlMapConfig.xml)) <?xml versi ...

  4. 网站整站下载工具—HTTrack Website Copier

    HTTrack是一个免费和易用的离线浏览工具(浏览器),它可以允许你下载整个WWW网站至本地目录,并且通过遍历网站目录获取HTML,图片和其他文件,是安全渗透测试和居家旅行必备软件. WinHTTra ...

  5. abap调vb写的dll实现电子天平的读数(带控件版)

    废话不多说,直接上. 鉴于abap调研的dll文件需要在wins注册,自己尝试过delphi和C#感觉不是很好,最后毅然选择了VB来写 因为需要用到MScomm控件,所以对于将要写的dll需要带for ...

  6. gulp教程之gulp-rev-append

    简介: 使用gulp-rev-append给页面的引用添加版本号,清除页面引用缓存. 1.安装nodejs/全局安装gulp/项目安装gulp/创建package.json和gulpfile.js文件 ...

  7. 几种jQuery 实现无限滚动的插件

    1.EndLess Scroll 2.infinite-scroll插件的使用

  8. java selenium (五) 元素定位大全

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 ...

  9. laravel composer 指定版本

    composer create-project laravel/laravel=5.2.* --prefer-dist

  10. 【转】Spring bean处理——回调函数

    Spring bean处理——回调函数 Spring中定义了三个可以用来对Spring bean或生成bean的BeanFactory进行处理的接口,InitializingBean.BeanPost ...