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模块化工具的更多相关文章

  1. JS模块化工具require.js教程(二):基本知识

    前一篇:JS模块化工具我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等 基本API require会定义三个变量:define,r ...

  2. 【转】JS模块化工具requirejs教程(二):基本知识

    前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...

  3. 【转】JS模块化工具requirejs教程(一):初识requirejs

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  4. sea.js模块化编程

    * 为什么要模块化? 解决文件依赖 解决命名冲突 ; var var2 = 2; function fn1(){ } function fn2(){ } return { fn1: fn1, fn2: ...

  5. JS模块化工具requirejs教程(一):初识requirejs

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  6. JS模块化工具require.js教程(一):初识require.js

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  7. 【requirejs】JS模块化工具requirejs教程

    初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元 ...

  8. JS模块化工具requirejs教程01

    转自:http://www.runoob.com/w3cnote/requirejs-tutorial-1.html 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签 ...

  9. JS模块化工具requirejs教程(二):基本知识

    基本API require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短 define 从名字就可以看出 ...

随机推荐

  1. deb文件怎么安装

    deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式.deb是debian发行版的软件包ubuntu是基于debian 发行的 所有可以用.d ...

  2. jq扩展

    方法一(不常用)$.myjq = function(){alert("hello myjQuery);}方法二声明:$.fn.myjq=function(){$(this).text(&qu ...

  3. leetcode Ch2-Dynamic Programming [2014]

    1. Triangle class Solution { public: int minimumTotal(vector<vector<int> > &triangle ...

  4. 捕获Task.WhenALl返回的Task的Exception

    如果有一个任务抛出异常,则Task.WhenAll 会出错,并把这个异常放在返回的Task 中.如果多个任务抛出异常,则这些异常都会放在返回的Task 中.但是,如果这个Task 在被await 调用 ...

  5. 批量检查多个网址是否正常(shell编程)

    #!/bin/bash #version 1.1 #by zengj #using checking urls . /etc/init.d/functions checkurl() { wget -o ...

  6. 中间人攻击-ARP毒化

    感谢Heee投递 中间人攻击虽然古老,但仍处于受到黑客攻击的危险中,可能会严重导致危害服务器和用户.仍然有很多变种的中间人攻击是有效的,它们能够很容易的欺骗外行并且入侵他们.正如字面意思一样,中间人攻 ...

  7. php中的foreach问题(1)

    前言 php4中引入了foreach结构,这是一种遍历数组的简单方式.相比传统的for循环,foreach能够更加便捷的获取键值对.在php5之前,foreach仅能用于数组:php5之后,利用for ...

  8. 当当网-前端project师測试题

                                     前端project师測试题(笔试时间20分钟.面试时间20分钟)   一.笔试 1.基础问题 (1)前端页面有哪三层构成,各自是什么? ...

  9. 持续集成之Jenkins+Gitlab实现持续集成

    项目使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将git路径存在这里还需要权限认证,否则会出现error  我们 ...

  10. HDU 4864 Task(经典贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others)    M ...