sea.js

sea.js

[TOC]

代表sea.js

一、CMD规范:

1、申明

一个模块就是一个文件,申明自己的文件js的时候,使用require(function(){})或者是require(factory)

2、 定义define

define是一个全局函数,用来定义模块的,就像是上边的申明一样

  1. 当参数是一个对象的时候,返回的就是json模版,或者是字符串模版

    define({name:'baipu'}) 又或者是define("my name is {{name}}")

  2. 参数是方法的时候,表示模块的构造方法

    define(function(){
    
     //这里是模块的代码
    
    })
    
  3. 多个参数时候,define(id?,deps?,factory); id表示标识符,deps表示依赖,注意:这里的参数不属于cmd范畴,而是modules/transport规范

3、factory函数

3.1、require

​ require是facatory的第一个参数,表示一个方法,用来引用其他的参数

    define(function(require,exports,module){
    //一、直接加载
        var a = require("./a");//这里引用js模块
    //二、异步加载模块
         var b= require.async(["./b,./c"],function(){
             c.doSomeThing();
             b.doSomeThine();
         });
    //三、使用模块系统内部的路径解析机制来解析并返回模块路径。该函数不会加载模块,只返回解析后的绝对路径。
        console.log(require("./d"));//http://example.com/path/to/d.js
        //这里是模块的代码
    });
3.2 exports
  1. 是一个对象,用来对外提供接口

    define(function(require,exports,module){
     //对外提供了foo变量
     exports.foo = "123";
        exports.dosomething = function(){};
        
    });
    

  1. 通过return提供接口

    define(function(require,exports,module){
     //对外提供了foo变量
     //inner code
     return {
            foo:"123",
            dosomething:function(){}
     }
    });
    //可以简化
     define({
            foo:"123",
            dosomething:function(){}
     })
    //注意以下为错误方法:
    
    define(function(require,exports,module){
     //对外提供了foo变量
     //inner code
     exports =  {
            foo:"123",
            dosomething:function(){}
     }
    });
    

  2. module.exports

    //modules.export.define(function(require,exports,module){
     //对外提供了foo变量
     //inner code
     module.exports =  {
            foo:"123",
            dosomething:function(){}
     }
    });
    
3.3 module

是一个对象,上面存储了与当前模块相关联的一些属性和方法。

  1. Module.id //模块的唯一标示
  2. module.uri//模块地址的绝对路径
  3. module.dependencie//当前模块的依赖
  4. module.exports对外提供的接口// 的赋值需要同步执行,不能放在回调函数
  5. module.constructor、给所有module` 参数对象添加一些公用属性或方法

二、sea.js 规范

1、require

正确拼写require用require不更换名字如req 也不赋值如:var req = require;然后以后用req 也不覆盖 也就是require = function(){}

2、 use

直接加载启动

seajs.use('./main', function(main) {
  main.init();
});

也可以批量加载

seajs.use(['./a', './b'], function(a, b) {
  a.init();
  b.init();
});

3、config

seajs.config({

  // 别名配置
  alias: {
    'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe',
    'json': 'gallery/json/1.0.2/json',
    'jquery': 'jquery/jquery/1.10.1/jquery'
  },

  // 路径配置
  paths: {
    'gallery': 'https://a.alipayobjects.com/gallery'
  },

  // 变量配置
  vars: {
    'locale': 'zh-cn'
  },

  // 映射配置
  map: [
    ['http://example.com/js/app/', 'http://localhost/js/app/']
  ],

  // 预加载项
  preload: [
    Function.prototype.bind ? '' : 'es5-safe',
    this.JSON ? '' : 'json'
  ],

  // 调试模式
  debug: true,

  // Sea.js 的基础路径
  base: 'http://example.com/path/to/base/',

  // 文件编码
  charset: 'utf-8'
});
  1. alias 当模块标识很长时,可以使用 alias 来简化。 这样引用的时候就方便多了 var $ = require('jquery');

  2. paths 当目录比较深,或需要跨目录调用模块时,可以使用 paths 来简化书写。

    seajs.config({
      paths: {
        'gallery': 'https://a.alipayobjects.com/gallery',
        'app': 'path/to/app',
      }
    });
    define(function(require, exports, module) {
    
       var underscore = require('gallery/underscore');
         //=> 加载的是 https://a.alipayobjects.com/gallery/underscore.js
    
       var biz = require('app/biz');
         //=> 加载的是 path/to/app/biz.js
    
    });
    
  3. vars 模块路径在运行时才能确定,这时可以使用 vars 变量来配置。

    seajs.config({
      vars: {
        'locale': 'zh-cn'
      }
    });
    
    
    define(function(require, exports, module) {
    
      var lang = require('./i18n/{locale}.js');
         //=> 加载的是 path/to/i18n/zh-cn.js
    
    });
    
  4. map该配置可对模块路径进行映射修改,可用于路径转换、在线调试等。

    seajs.config({
      map: [
        [ '.js', '-debug.js' ]
      ]
    });
    
    
    
    define(function(require, exports, module) {
    
      var a = require('./a');
         //=> 加载的是 path/to/a-debug.js
    
    });
    
  5. Preload可以在普通模块加载前,提前加载并初始化好指定模块。

    // 在老浏览器中,提前加载好 ES5 和 json 模块
    seajs.config({
      preload: [
        Function.prototype.bind ? '' : 'es5-safe',
        this.JSON ? '' : 'json'
      ]
    });
    
    seajs.config({
      preload: 'a'
    });
    
    // 在加载 b 之前,会确保模块 a 已经加载并执行好
    seajs.use('./b');
    
  6. Debug. 值为 true 时,加载器不会删除动态插入的 script 标签。插件也可以根据 debug 配置,来决策 log 等信息的输出。

  7. Base 设置基础路径

  8. Charset获取模块文件时,<script><link> 标签的 charset 属性。 默认是 utf-8也可以是一个函数,看返回值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 一、seajs.config配置说明: 1.base说明: base是字符串类型,表示基础或叫做根路径(最好绝对地...
    柠檬树__阅读 1,103评论 0 5
  • 平台:Windows 7 版本:1.7.7 简介 Sea.js实现了对JS代码的模块化组织,大大提高了前端开发效率...
    逸之阅读 4,428评论 1 4
  • 随着前端业务复杂度的增加,模块化成为一个大的趋势。而在ES6还未被浏览器所支持的情况下,commonjs作为ES6...
    吴高亮阅读 1,050评论 0 3
  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    MapleLeafFall阅读 1,165评论 0 0
  • 为什么要使用模块化? 最主要的目的: 解决命名冲突 依赖管理 其他价值 提高代码可读性 代码解耦,提高复用性 CM...
    JamHsiao_aaa4阅读 361评论 0 1