seajs学习笔记
seajs配置
seajs.config({
//别名配置
alias:{
'es5-safe':'gallery/es5-safe/0.9.3/es5-safe',
'jquery':'jquery/jquery/1.10.1/jquery',
'json':'gallery/json/1.0.2/json',
},
//配置路径
path:{
'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,
//seajs的基础路径
base:'http:example.com/path/to/base',
//文件编码
charset:'utf-8'
})
seajs使用
1.当模块标识很长时,可以使用alias来简化。
seajs.config({
alias:{
'jquery':'jquery/jquery/1.10.1/jquery',
'app/biz':'http://path/to/app/biz.js',
}
})
define(function(require,exports,module){
var $=require('jquery');
//加载的是http://path/to/base/jquery/jquery/1.10.1/jquery.js
var biz=require('app/biz');
//加载的是http://path/to/app/biz.js
})
2.当目录比较深,或需要跨目录调用模块时,可以使用paths来简化。
seajs.config({
path:{
'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变量来配置
seajs.config({
vars:{
'locale':'zh-cn'
}
})
define(function(require,exports,module){
var lang=requrie('./i18n/{locale}.js')
//加载的是path/to/il8n/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'
]
});//preload中的空字符串会被忽略
6.定义模块
define('hello', ['jquery'], function(require, exports, module) {
// 模块代码
});
define('hello', ['jquery'], function(require, exports, module) {
// 模块代码
});
7.require 是一个方法,接受 模块标识 作为唯一参数,用来获取其他模块提供的接口。
define(function(require, exports) {
// 获取模块 a 的接口
var a = require('./a');
// 调用模块 a 的方法
a.doSomething();
});
8.require.async 方法用来在模块内部异步加载模块,并在加载完成后执行指定回调。callback 参数可选。
define(function(require, exports, module) {
// 异步加载一个模块,在加载完成时,执行回调
require.async('./b', function(b) {
b.doSomething();
});
// 异步加载多个模块,在加载完成时,执行回调
require.async(['./c', './d'], function(c, d) {
c.doSomething();
d.doSomething();
});
});
注意:require 是同步往下执行,require.async 则是异步回调执行。require.async 一般用来加载可延迟异步加载的模块。
9.使用模块系统内部的路径解析机制来解析并返回模块路径。该函数不会加载模块,只返回解析后的绝对路径。
define(function(require, exports) {
console.log(require.resolve('./b'));
// ==> http://example.com/path/to/b.js
});
10.exports 是一个对象,用来向外提供模块接口。
define(function(require, exports) {
// 对外提供 foo 属性
exports.foo = 'bar';
// 对外提供 doSomething 方法
exports.doSomething = function() {};
});
//除了给 exports 对象增加成员,还可以使用 return 直接向外提供接口。
define(function(require) {
// 通过 return 直接提供接口
return {
foo: 'bar',
doSomething: function() {}
};
});
define(function(require, exports, module) {
module.exports = {
foo: 'bar',
doSomething: function() {}
};
});
11.模块的唯一标识。
define('id', [], function(require, exports, module) {
// 模块代码
});
12.根据模块系统的路径解析规则得到的模块绝对路径。
define(function(require, exports, module) {
console.log(module.uri);
// ==> http://example.com/path/to/this/file.js 一般情况下(没有在 define 中手写 id 参数时),module.id 的值就是 module.uri,两者完全相同。
});
练习代码
//模块入口
seajs.use('./js/test/test1',function(a){
a.fun1()
})
//test1.js
define(function(require,exports,module){
var test=require('./test2');
console.log(test.bb)//我safdsafes
console.log(require.resolve('./test1'))//http://127.0.0.1:8020/seajs/js/test/test1.js
console.log(module.uri)//http://127.0.0.1:8020/seajs/js/test/test1.js
console.log(module.dependencies)//['test2']
module.exports={
fun1:function(){console.log("fun1----------"+test.fun1())},//fun1----------fun1----------
fun2:function(){console.log("fun2---------")},
bb:'我是代理商积分'
}
}) //test2.js
define(function(require,exports,module){
module.exports={
fun1:function(){ return "fun1----------"},
fun2:function(){console.log("fun2---------")},
bb:'我safdsafes'
}
})
seajs学习笔记的更多相关文章
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- seaJs学习笔记之javascript的依赖问题
之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...
- SeaJS学习笔记(一) ./ 和 ../ 区别
最近要去实习,公司里使用sea.js进行模块化开发 具体下载安装就不多说了,请参见SeaJS官网 <!DOCTYPE html> <html> <head> < ...
- seajs教程之seajs学习笔记 seajs.use用法
seajs.use 用来在页面中加载模块.通过 use 方法,可以在页面中加载任意模块. 实例地址:http://www.android100.org/html/201405/23/12807.htm ...
- seajs 学习笔记
seajs的作者是玉伯,具体好处优点等详见官方网址 介绍 1 模块定义define define(function(require,exports,module){ //require 引入需要的模块 ...
- seaJS学习资料参考
seajs官方文档:http://seajs.org/docs/#docs http://wenku.it168.com/d_000096482.shtml http://blog.codinglab ...
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- python 字符串截取
我们可以通过索引来提取想要获取的字符,可以把python的字符串也做为字符串的列表就更好理解 python的字串列表有2种取值顺序1是从左到右索引默认0开始的,最大范围是字符串长度少1s = 'ilo ...
- 深入理解图优化与g2o:图优化篇
前言 本节我们将深入介绍视觉slam中的主流优化方法——图优化(graph-based optimization).下一节中,介绍一下非常流行的图优化库:g2o. 关于g2o,我13年写过一个文档,然 ...
- 用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】
RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.temp ...
- c# socket 解决粘包,半包
处理原理: 半包:即一条消息底层分几次发送,先有个头包读取整条消息的长度,当不满足长度时,将消息临时缓存起来,直到满足长度再解码 粘包:两条完整/不完整消息粘在一起,一般是解码完上一条消息,然后再判断 ...
- 【转】Oracle RAC 环境下的连接管理
文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...
- 记一个dynamic的坑
创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下: namespace ConsoleApplication1 { class Program { static ...
- NavMesh名字、层索引、层值之间的转换
// Nav层名字-->层的值,1.2.4.8.16 public static int AgentLayerNameToValue(string name) { int idx = NavMe ...
- 编写高质量JS代码的68个有效方法(十)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Connecting my Particle Photon Internet of Things device to the Azure IoT Hub(Translation)
原文: http://www.hanselman.com/blog/ConnectingMyParticlePhotonInternetOfThingsDeviceToTheAzureIoTHub.a ...
- Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化
通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控 ...