sea.js常用的api简易文档


Posted in Javascript onNovember 15, 2016

本文罗列了seajs常用的api和代码示例,下面话不多说,来看看详细的介绍,有需要的朋友们可以参考借鉴。

一、seajs.config

alias

别名配置,配置之后可在模块中使用require调用 require('jquery');

seajs.config({
 alias: { 'jquery': 'jquery/jquery/1.10.1/jquery' } 
});
define(function(require, exports, module) {
 //引用jQuery模块
 var $ = require('jquery');
});

paths 设置路径,方便跨目录调用。通过灵活的设置path可以在不影响base的情况下指定到某个目录。

seajs.config({
 //设置路径
 paths: {
  'gallery': 'https://a.alipayobjects.com/gallery'
 },
 // 设置别名,方便调用
 alias: {
  'underscore': 'gallery/underscore'
 }
});

vars

变量配置。有些场景下,模块路径在运行时才能确定,这时可以使用 vars 变量来配置。

vars 配置的是模块标识中的变量值,在模块标识中用 {key} 来表示变量。

seajs.config({
 // 变量配置
 vars: {
  'locale': 'zh-cn'
 }
});
define(function(require, exports, module) {
 var lang = require('./i18n/{locale}.js');
  //=> 加载的是 path/to/i18n/zh-cn.js
});

map

该配置可对模块路径进行映射修改,可用于路径转换、在线调试等。

seajs.config({
 map: [
  [ '.js', '-debug.js' ]
 ]
});
define(function(require, exports, module) {
 var a = require('./a');
 //=> 加载的是 path/to/a-debug.js
});

preload

使用preload配置项,可以在普通模块加载前,提前加载并初始化好指定模块。

preload中的空字符串会被忽略掉。

// 在老浏览器中,提前加载好 ES5 和 json 模块
seajs.config({
 preload: [
  Function.prototype.bind ? '' : 'es5-safe',
  this.JSON ? '' : 'json'
 ]
});

注意:preload中的配置,需要等到 use 时才加载。比如:

seajs.config({
 preload: 'a'
});
// 在加载 b 之前,会确保模块 a 已经加载并执行好
seajs.use('./b');

debug

值为true时,加载器不会删除动态插入的 script 标签。插件也可以根据debug配置,来决策 log 等信息的输出。

base

Sea.js 在解析顶级标识时,会相对 base 路径来解析。

注意:一般请不要配置 base 路径,把 sea.js 放在合适的路径往往更简单一致。

charse

获取模块文件时,<script> 或 <link> 标签的charset属性。 默认是utf-8 charset还可以是一个函数:

seajs.config({
 charset: function(url) {
  // xxx 目录下的文件用 gbk 编码加载
  if (url.indexOf('http://example.com/js/xxx') === 0) {
   return 'gbk';
  }
  // 其他文件用 utf-8 编码
  return 'utf-8';
 }
});

二、seajs.use

用来在页面中加载一个或多个模块。seajs.use(id, callback?)

// 加载一个模块
seajs.use('./a');
// 加载一个模块,在加载完成时,执行回调
seajs.use('./a', function(a) {
 a.doSomething();
});
// 加载多个模块,在加载完成时,执行回调
seajs.use(['./a', './b'], function(a, b) {
 a.doSomething();
 b.doSomething();
});

注意:seajs.use 与 DOM ready 事件没有任何关系。如果某些操作要确保在 DOM ready 后执行,需要使用 jquery 等类库来保证。比如

seajs.use(['jquery', './main'], function($, main) {
 $(document).ready(function() {
  main.init();
 });
});

注意:use方法第一个参数一定要有,但是可以是null,也可以是一个变量

var bootstrap = ['bootstrap.css', 'bootstrap-responsive.css', 'bootstrap.js'];
seajs.use(bootstrap, function() {
 //do something
});

三、seajs.cache

通过 seajs.cache,可以查阅当前模块系统中的所有模块信息。

比如,打开 seajs.org,然后在 WebKit Developer Tools 的 Console 面板中输入 seajs.cache,可以看到:

Object
 > http://seajs.org/docs/assets/main.js: x
 > https://a.alipayobjects.com/jquery/jquery/1.10.1/jquery.js: x
 > __proto__: Object

这些就是文档首页用到的模块。展开某一项可以看到模块的具体信息,含义可参考:CMD 模块定义规范 中的 module 小节。

四、seajs.reslove

类似require.resolve,会利用模块系统的内部机制对传入的字符串参数进行路径解析。

seajs.resolve('jquery');
// => http://path/to/jquery.js
seajs.resolve('./a', 'http://example.com/to/b.js');
// => http://example.com/to/a.js

seajs.resolve 方法不光可以用来调试路径解析是否正确,还可以用在插件开发环境中。

五、seajs.data

通过 seajs.data,可以查看 seajs 所有配置以及一些内部变量的值,可用于插件开发。当加载遇到问题时,也可用于调试。

六、常见问题

关于模块标识

Seajs模块标识主要以小驼峰字符串、.或..

// 在 http://example.com/js/a.js 的 factory 中:
require.resolve('./b');
 // => http://example.com/js/b.js
// 在 http://example.com/js/a.js 的 factory 中:
require.resolve('../c');
 // => http://example.com/c.js

分为 相对 与 顶级 标识。以.或..开头,则为相对标识 。以小驼峰字符串开关,则为顶级标识。

// 假设 base 路径是:http://www.aseoe.com/assets/
// 在模块代码里:
require.resolve('gallery/jquery/1.9.1/jquery');
 // => http://www.aseoe.com/assets/gallery/jquery/1.9.1/jquery.js

//sea.js的路径,即 base 路径,相对于当前页面
<script src="../actjs/assets/sea-modules/seajs/2.1.1/sj.js"></script>
<script type="text/javascript">
//配置Seajs
seajs.config({
 alias: {
  //顶级标识,基于 base 路径
  'actjs': 'actjs/core/0.0.7/core.js',
   // => http://
  'position': 'actjs/util/0.0.2/position.js'
 }
});
seajs.config({
 alias: {
  //普通路径,相对于当前页面
  'affix': '../../actjs/assets/widget/src/widget-affix.js',
  //相对标识,相对于当前页面
  'init': './src/init.js'
 }
});
</script>

关于路径

Seajs除了相对与顶级标识之外,还可以使用普通路径来加载模块。

就到当前页面的脚本分析

开始的时候会觉得Seajs的路径有点不习惯,由其是Base路径。切记Base路径就是sea.js的那个文件的上级路径,然后所有顶级标识,相对标识都是相对于这个Base来调整。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作带来一定的帮助如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JavaScript学习笔记记录我的旅程
May 23 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
理解jquery事件冒泡
Jan 03 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
Apr 06 Javascript
JS实现标签页切换效果
May 04 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
详解Chai.js断言库API中文文档
Jan 31 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
js实现倒计时及时间对象
Nov 15 #Javascript
Bootstrap简单表单显示学习笔记
Nov 15 #Javascript
JS实现根据用户输入分钟进行倒计时功能
Nov 14 #Javascript
js调用屏幕宽度的简单方法
Nov 14 #Javascript
jquery心形点赞关注效果的简单实现
Nov 14 #Javascript
JS实现自动阅读单词(有道单词本添加功能)
Nov 14 #Javascript
9个让JavaScript调试更简单的Console命令
Nov 14 #Javascript
You might like
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
浅析vue数据绑定
2017/01/17 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python中的协程深入理解
2019/06/10 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Python中拆分字符串的操作方法
2019/07/23 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
加拿大探亲邀请信
2014/01/28 职场文书
30年同学聚会感言
2014/01/30 职场文书
要账委托书范本
2014/09/15 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
JS 基本概念详细介绍
2021/10/16 Javascript
JavaScript实现队列结构过程
2021/12/06 Javascript