sea.js模块化工具
sea.js
一、
sea.js向全局中引入了两个变量seajs、define;
1、seajs用加载文件
seajs.use(deps,callback)异步引入入口模块
路径要以sea.js文件所在的目录为准
参数:
deps:可以是一个字符串,也可以是一个数组;如果是一个字符串表示要引入的文件地址;如果是一个数组,表示加载多个模块文件。
callback:回调函数,模块文件加载进来之后执行的事情
回调函数的参数是对应的模块向外暴露的内容
eg:
seajs.use(["js/A.js", "js/B.js"])
注意:seajs.use不能引入具备id的模块,因为第一个参数既是文件的路径又是文件的id
2、define定义模块
只有当参数是函数的时候才有意义
(1)一个参数定义模块
define(content)当content为非函数时,定义即暴露;当content是函数时,暴露如下:
define(function(require, exports, module) {
这种定义方式默认暴露一个对象出去
})
(2)两个参数定义模块
第一种方式:define(id,handler)
参数:id:当前模块的id;handler:当前模块的函数体
第二种方式:define(deps,handler)
参数:deps:当前模块所依赖的其他模块,数组类型;handler:当前模块的函数体
(3)三个参数定义模块
define(id,deps,handler)
参数:id:当前模块id;deps:当前模块所依赖的其他模块,数组类型;handler:当前模块的函数体
二、模块暴露
(1)定义即暴露
define(非函数)
(2)使用exports向外暴露
打点或方括号添加属性
define(function(require,exports,module){
exports.a = 10;
})
(3)使用module.exports向外暴露
打点或方括号添加属性
module.exports.a = 10;
(4)使用this向外暴露,只可以打点向外暴露内容
(5)使用return向外暴露
三、加载具备id的模块
seajs.use无法引入 具备id的模块
原因:seajs.use方法的参数接收的既是文件的路径有事模块的id,所以能加载默认模块,因为默认模块的路径和id一致;
当模块具备id时,seajs.use只可以完成第一步:加载文件;但是第二步:加载模块完成不了。
//把A文件作为入口文件,然后把BB(带id的模块)模块暴露,在A文件里面通过require引入BB模块文件;在index.html文件中引入A模块文件
//想要引入BB.js模块文件中的a模块,无法使用seajs.use;
//所以使用A.js引入BB.js文件中的a模块
index.html:
seajs.use("A.js",function(b) {
// console.log(b)
})
A.js:
define(["js/BB.js"],function(require, exports, module) {
var b = require("a")
console.log(b)
})
BB.js:
define("a",function(require,exports,module) {
module.exports.a = 12;
})
四、require.async()用法同seajs.use
五、模块配置
配置需要使用seajs.config方法
1、paths:值是一个对象,用来配置路径,方便跨目录调用
用法:
seajs.config({
psth:{
key: value;//用所有的key代替value
}
});
案例:
index.html:
seajs.config({
//paths值是一个对象,用来配置路径,所有的key代替value
paths: {
"j":"js"//AA.js文件在js文件夹下,用j来代替js路径
}
})
//此处在引用模块文件时就可以用j
seajs.use("j/AA",function(a) {
console.log(a) //输出111
})
AA.js:
define(function(require,exports,module) {
module.exports.aa = 111;
})
2、alias:值是一个对象,用来给文件起别名
用法:
seajs.config({
alias:{
key: value;//用所有的key代替value
}
});
案例:
index.html:
seajs.config({
//alias给一个文件起别名
alias: {
"b": "js/AA" //把AA模块文件起别名为b
}
})
//此处引入AA.js文件时就可以用b代替
seajs.use("b",function(a) {
console.log(a) //输出111
})
AA.js:
define(function(require,exports,module) {
module.exports.aa = 111;
})
3、map:映射,可用于路径转换;例如,将数组中的第一个全部按照规则映射成第二个
案例:
seajs.config({
// 映射
map: [
// 将数组中的第一个 全部按照规则映射成第二个
['http://example.com/js/app/', 'http://localhost/js/app/']
]
});
4、vars:变量配置
案例:
index.html:
seajs.config({
vars: {
a: "BB"
}
})
seajs.use("js/AA",function(a) { })
AA.js:
define(["js/BB"],function(require,exports,module) {
var lang = require("js/{a}")//加载的是js/BB.js
console.log(lang) //输出12
})
BB.js:
define(function(require,exports,module) {
module.exports.dd = 12;
})
5、base:配置根目录
六、require.async:模块内部异步加载一个或多个模块;用法跟seajs.use一样。
案例:
define(function(require){
require.async(['aModule','bModule'],function(a,b){ // 异步加载多个模块,在加载完成时,执行回调
a.func();
b.func();
})
});
sea.js模块化工具的更多相关文章
- JS模块化工具require.js教程(二):基本知识
前一篇:JS模块化工具我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等 基本API require会定义三个变量:define,r ...
- 【转】JS模块化工具requirejs教程(二):基本知识
前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...
- 【转】JS模块化工具requirejs教程(一):初识requirejs
随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...
- sea.js模块化编程
* 为什么要模块化? 解决文件依赖 解决命名冲突 ; var var2 = 2; function fn1(){ } function fn2(){ } return { fn1: fn1, fn2: ...
- JS模块化工具requirejs教程(一):初识requirejs
随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...
- JS模块化工具require.js教程(一):初识require.js
随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...
- 【requirejs】JS模块化工具requirejs教程
初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元 ...
- JS模块化工具requirejs教程01
转自:http://www.runoob.com/w3cnote/requirejs-tutorial-1.html 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签 ...
- JS模块化工具requirejs教程(二):基本知识
基本API require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短 define 从名字就可以看出 ...
随机推荐
- Spring3实战第二章第二小节 IOC依赖注入 list和map集合
Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...
- js结构化命名的思考
var koooke ={androidShare:{ show : function() {alert(1000)}}};koooke.androidShare.show(); 以上JS是偶然缩写. ...
- 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM
本文说明如何在 Azure 中上传自定义的虚拟硬盘 (VHD) 或复制现有 VHD,并从自定义磁盘创建 Linux 虚拟机 (VM). 可以根据要求安装并配置 Linux 分发版,并使用该 VHD 快 ...
- UML面向对象建模基础
一个比较好的UML教程PPT https://wenku.baidu.com/view/cf80902e26284b73f242336c1eb91a37f11132ac.html
- Eclipse编码格式
来源:http://e-ant.javaeye.com/blog/177579 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,E ...
- [使用教程]cocostudio之UI编辑器动画模式
有坑! 1. 使用 (1)点击动画模式按钮,进入动画模式 (2)[关键1]左下角动作列表,右键添加动画 (3)[关键2]渲染区选择要动画的控件,右键编辑动画 * 可以看到最下面多了关键帧 (4)在右边 ...
- 如何使用jMeter对某个OData服务进行高并发性能测试
For project reason I have to measure the performance of OData service being accessed parallelly. And ...
- 转 C++11 并发指南std::condition_variable详解
之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...
- phoneGap的Android下编写phonegap 发送短信插件
一.前端代码的编写 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- Adobe flash player 因过期而遭到阻止解决办法
最近使用谷歌浏览器时总是提示Adobe flash player 因过期而遭到阻止,这让人很头痛,基本上就是打开一个网页就会弹出一个提示,下面是解决办法. 问题的截图界面: 解决方法:在chrome浏 ...