欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Seajs 笔记

程序员文章站 2024-03-26 12:46:17
...

Seajs介绍

seajs是国内的一套模块化开发框架,有淘宝工程师王伯写的,有中文文档,学习简单

开源代码库

https://github.com/seajs/seajs

Seajs出现的比较晚,因此借鉴了,nodejs的commonjs规范(加载时同步的),但是前端使用文件是要异步加载文件的,加载完成之后才能使用,又借鉴了前端的AMD规范,seajs的规范称之为cmd规范,这套框架在使用的时候,建议我们使用commonjs规范

模块化开发分两步: 定义模块、 使用模块

①seajs的引入

seajs 引入之后会向全局添加两个变量, 第一个是seajs,第二个是define

seajs引入文件的目录是seajs为根目录引入文件的

通常我们把seajs放最外层(根目录最后就放在最最最外层的文件夹里,这样引入其他文件的时候不易出错)

seajs对js敏感,所以可以省略 . js后缀

seajs本身就是一个对象,对象中包含了一些函数和对象,还有一些相关信息

seajs . use 是规定如何使用模块

seajs.config 用来配置模块

 

②定义模块

1 传递一个参数

define(xx)xx:可以是数字,字符串,数组,对象,Boolean

以上定义参数的形式,定义什么就会向外暴露什么

如果参数是一个函数:

函数中就会有三个参数:

require:引入其他模块的方法

exports:是向外暴露内容的对象

module:模块的相关信息

暴露的接口是由exports或者是module定义

经常使用的就是这一种

 

seajs暴露接口的方法

exports.xx

module.exports.xx

module.exports = fn

return str

return {}

return fn

this.xx = xx 不推荐this

优先级: return > module.exports > exports = this

 

2 传递两个参数

define(str,fn)

str:字符串 表示模块id

fn: 定义模块的函数

具有id 的模块,seajs.use不能直接加载

define(arr,fn)

arr: 表示模块的依赖集合

arr中是模块的文件地址,写入这里的模块文件都会被加载,但是模块不会被指定

fn:定义模块的函数 require, exports, module ,require 方法指定arr中加载进来的这些模块文件中的所有模块的id

 

3 传递三个参数

define(str ,arr ,fn)id(同常写当前文件的路径) 依赖集合(需要加载的模块的文件地址) 回调函数(require, exports, module)

④ 引入带有id的模块

引入带有id的模块:

1 在依赖集合中加载模块文件

2 使用require指定模块的id (可以是字符串和数组)

require(“ID”, fn)requirejs中不可以使用字符串的形式

require([ “ID” ], fn)推荐,这个数组方法和requirejs一样

 

每个模块文件最终都会有一个id

如果一个模块文件中,有两个匿名的模块,以下面模块为准。

如果一个模块文件中, 有两个相同id的模块,是以第一个为准

如果一个模块文件中, 有多个不同id的模块,那么以require指定的id为准

⑤ seajs.use方法

seajs.use方法有两种使用方式

1 seajs.use(str, fn)

str: 模块的文件地址(表示引入了一个模块文件,通常是入口文件)

fn:回调函数,函数中的参数就是前面引入模块文件向外暴露的功能

 

2 seajs.use(arr , fn)

arr: 模块的依赖集合

fn: 回调函数,函数中的参数就是前面引入模块文件向外暴露的功能一一对应的

 

⑥配置seajs seajs插件

我们使用seajs.config方法来配置信息

配置:是框架本身就有的功能,只是被隐藏了,需要开启,所以要配置

插件:本身没有这个功能,只是别人实现了,需要引入文件才能使用

 

1 alias 用来简化文件用,如果文件名称过长,我们用这个简化

seajs.config({

    alias: {

    "m" : "modules/js/jquery-1.7.2"

    }

})

 

2 paths 用来简化路径 (paths只能用来简化路径)

seajs.config({

    paths: {

    "m" : "modules"

    }

})

3 map 批量处理文件,值是一个二维数组

数组中的第一个成员表示修改后的文件,第二个成员表示匹配的文件

// 使用config进行配置
seajs.config({
	// map
	map: [
		// [".js", ".min.js"]
		["jquery.js", "jquery.min.js"]
	]
})
// 引入模块文件
seajs.use("modules/js/jquery", function(jq) {
	console.log(jq)
})
// 这里不会影响main.js的引入
seajs.use("modules/main", function(main) {
	

4 vars 处理路径不能拼接的问题

seajs.config({

    paths: {

    "j" : "jquery"

    }

})
var jq = require("modules/js/{j}-1.7.2");

 

5 base 改变根目录 (常用)

seajs.config({

    paths: {

    base: "modules"

    }

})

插件

css插件

第一步在seajs文件后面引入seajs-css.js插件

第二步引入css文件即可

注意: 引入的css文件一定不能省略.css后缀, seajs对js敏感, 对css不敏感

<script type="text/javascript" src="sea.js"></script>
<script type="text/javascript" src="seajs-css.js"></script>
<script type="text/javascript">
// 引入css文件
seajs.use("css.css");

 

预加载插件(比较重要)

第一步在seajs文件之后引入seajs-preload.js插件

第二步配置preload

值是一个数组,数组中的成员就是要预先加载的文件(加载时间实在use方法之后,模块加载之前去执行,所以预加载的配置我们一般要放在最前面

// 配置preload
seajs.config({
preload: ["jquery-1.7.2.js"]
})

seajs.use("main", function() {
	console.log($);
})

 

 

 

 

上一篇: umd

下一篇: classify CIFAR Image With CNN