SeaJS是一个基于CMD模块定义规范实现一个模块系统加载器
 
如何选择一个技术产品栈:
- 看作者是否是大牛
- 看社区是否活跃
- 看是否经常更新
SeaJS的作者已经不更新该项目了,但是国内很多公司还是在使用SeaJS作为前端模块化解决方案,
学习SeaJS有助于我们学习 Node.js 中的模块系统,因为他们所使用的规范基本一致。
学习完SeaJS之后可以自学 RequireJS[RequireJS官方网站](http://requirejs.org/),思想基本一样。无非是API的区别。
### 体验官方demo
###seaJs使用步骤:
1. 下载 sea.js 库
2. 在页面中引入 sea.js
3. define - 定义模块
4. module.exports - 暴露接口
5. require - 加载模块
6. seajs.use - 从入口模块启动模块系统
    seaJs.use('./././',function(a){
        console.log(a);//其中a就是exports而不是module.exports
    }
10、define()的用法:
    define(object)
    define(string)
    define(function(require,exports,medule){
        //所有的自己的js 代码都写在回调函数中
    })
    例子1:
     define(function (require ,exports , module ){    //最好在每一次定义模块的时候,尽量都使用匿名函数,并传入三个参数的方式;不要重命名require函数;
            module.exports = {    //通过这种形式将对象暴漏到模块之外,供其他文件使用,可以直接使用exports = ...
                    add : require ( ' ./././ ' ) ,  //require的参数值必须是字符串,该字符串就是表示模块的一个模块标识
                    mod : require ( ' ./././ ' )    // 访问的时候使用 mod() 直接调用
           }
    })
    例子2:
    define ( function ( require , exports , module ) {
            exports.add = reuire ( ' ./././' ) ;    // 访问的时候需要通过 exports.add()方式进行调用
            exports.mod =require ( './././' );
    })
11、require('./././')加载文件模块
        最好吧所有的require都写在define 函数中js 代码的最上面
        [require 书写约定](https://github.com/seajs/seajs/issues/259)
12、seaJs在页面中的使用:
        首先加载sea.js 文件
        然后再启动模块:<script> </script>标签中加载入口模块 seajs.use('./a') 
            启动模块系统----开机
            seaJs.use方法是异步加载模块文件
13、模块标识:其实就是模块的路径,可以不包含文件的后缀名,因为加载的都是js文件
        相对标识:以 ./ 或者 ../ 开始的都是相对标识,相对于当前出现的位置所属的文件
        顶级标识:不以 ./ 或者 ../ 或者 / 开始的标识是顶级标识,顶级标识相对模块系统的基础路径来解析,模块系统的基础路径在不指定的情况下,
            默认顶级目录是第三方插件 sea.js 所在的目录,可以通过 seajs.config() 方法来指定顶级标识的基础路径
            顶级标识配置:seajs.config({
                base : ' ./ '  ; //指定当前目录为顶级目录 
            })
        模块标识永远相对于require出现的文件路径。
14、require.async( './文件' )实现异步按条件加载
        if(true){require('./a')}else{require('./b')}这时候a和b文件都会被加载下来
        require是所有加载成功之后才解析和执行
        require.async可以按照条件进行加载,代码执行到具体位置的时候才会加载和执行
         if(true){
                require.async('./b' , function (foo){
                    console.log(foo) ;  // foo就是在./b 文件中表露出来的内容
                })
         }else {
                require.async('./a' , function () {   }  )
         }
15、exports 和 module
        module.exports就是模块对外导出 的接口对象,相当于执行了 return module.exports
        exports就是module.exports的一个别名而已。
        module.exports就是当前模块与外部文件的接口对象。
    首先需要明白:
        var  foo2 = {}
        var foo3 =foo2
        foo3.name = 'name' // 这是修改了foo3 ,它的引用也被修改
        console.log(foo2)
        console.log(foo3)
        foo3 = 'hello'  // 这是对foo3重新赋值后,就丢失了原来foo2的引用
        console.log(foo2)
        console.log(foo3)
    然后:
        var foo ={
            obj : {}
        }
        function changeFoo(obj,foo){
            console.log(obj===foo.obj) //true
            obj.name = 'jack'
            obj = 'hello'
            console.log(obj===foo.obj)  //false
            return foo.obj
        }
        console.log(changeFoo(foo.obj,foo)) // {name : jack}
    最后:
        obj 就相当于 exports,foo 就相当于 module。综上所述可知,不能给exports重新赋值,这样就切断了exports与module.exports之间的联系,必须通过 点 的形式修改exports的值。
16、浏览器中的JS不能做什么?
        不能操作数据库、不能操作文件、浏览器的JS只能通过AJAX发送请求而不能接受请求(后面的Socket网络编程就可以进行双向通信了)
        JS可以脱离浏览器单独运行(这时候就没有BOM和DOM), JS仅仅是语言而已(以前所学的JS仅仅是ECMAScript)
 

模块化开发(二)--- seaJs入门学习的更多相关文章

  1. javascript模块化开发(二)

    模块化开发(一) ES6模块化 详解 ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict". 顶层的this指向undefined,即不应该在顶层代码 ...

  2. 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

    ​ 参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...

  3. msp430入门学习44

    msp430的其他十二 msp430入门学习

  4. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  5. seaJs模块化开发简单入门

    随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...

  6. JavaScript学习总结(六)——前端模块化开发

    早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...

  7. 前端模块化开发学习之gulp&browserify篇

     随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发 ...

  8. seajs进行模块化开发

    seajs进行模块化开发 模块化前端开发入门指南(二) 2015-08-26 15:23 by paseo, 370 阅读, 0 评论, 收藏, 编辑 概览 使用seajs模块化加载器进行模块化开发, ...

  9. SeaJS入门教程系列之使用SeaJS(二)

    SeaJS入门教程系列之使用SeaJS(二) 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-03我要评论 这篇文章主要介绍了SeaJS入门教程系列之使用SeaJS,着重介绍了SeaJ ...

随机推荐

  1. Flask框架 之request对象

    一.request对象属性 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict co ...

  2. java项目其他基础配置

    创建完maven项目之后. 1.pom.xml文件配置项目相关的架包. 2.src.main.resources下边 创建文件夹:spring以及mapper. 3.src.main.resource ...

  3. vue基础---模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  4. Loj #6000.「 网络流 24 题 」搭配飞行员

    解题思路 考虑如何建模. 既然是网络流,那么肯定要有源点和汇点.而这个题目并没有什么明显的源点和汇点. 想一想,如果一个飞机能够起飞的话,那么必定有一对可以配对的正副驾驶员.也就是说一条曾广路能够上必 ...

  5. (C/C++学习)19.单目标遗传算法的C程序实现

    说明:在学习生活中,经常会遇到各种各样的最优问题,其中最常见的就是求某个多维(多个自变量)函数在各个自变量各取何值时的最大值或最小值:例如求函数 f(x) = (x-5)2+(y-6)2+(z-7)2 ...

  6. zabbix+docker

    由于公司线上服务器数量太少,又要用于生产,领导让上zabbix,但熟知zabbix搭建需要LAMP或者LNMP,如果和生产服务器混搭的话,不方便管理,也怕出问题,所以就先使用docker方式搭建管理. ...

  7. centos下kong源码安装

    参考资料: https://docs.konghq.com/install/source/ 环境准备:操作系统 centeros7.3 1 :openssl和pcre一般系统自带,如果没有可自己安装  ...

  8. CentOS7 安装、配置 Memcached

    点击访问原文地址 介绍 Memcached 是一个分布式.高性能的内存缓存系统,通过缓存内存中的数据和对象,提高和加速动态 web 应用程序的性能.它主要用于加速对数据库重度使用的站点. Memcac ...

  9. 整理推荐比较好用的具有书签搜索功能的chrome插件

    平时在整理学习chrome插件的过程中,经常会去试用各种大家推荐的插件.在去年我们的一篇文章:推荐六款好用的书签收藏夹剪藏型管理插件.这里面介绍的是收藏书签的插件.而随着我们使用chrome越来越频繁 ...

  10. Django 命令行调用模版渲染

    首先我们需要进入 Django 的 shell python manage.py shell 渲染模版中的 name from django.template import Context,Templ ...