sea.js的初次尝试

sea.js文档地址:http://seajs.org/docs/#docs

sea.js是一个模块加载器,一个文件就是一个模块。

sea.js主要解决的问题是:模块化编程(针对js)、异步加载、无需考虑命名空间

初次尝试:

1.加载模块

sea.use加载一个或多个模块

define用来定义模块

目录结构:

--test.html

--a

|--a.js

--b

|--b.js

--seajs

|--seajs

test.html:

<script type="text/javascript">
		seajs.use(['seajs/test/a/a','seajs/test/b/b']);
</script>

a/a.js:


define(function(require,exports,module){
	document.write("i am a \n");
})

效果:

页面中显示内容


虽然实验的例子很简单,但是也遇到了一些问题,比如使用sea.use的时候引入模块的路径问题

官方对路径问题给出的文档:

相对标识

相对标识以 . 开头,只出现在模块环境中(define 的 factory 方法里面)。相对标识永远相对当前模块的 URI 来解析:

// 在 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

顶级标识

顶级标识不以点(.)或斜线(/)开始, 会相对模块系统的基础路径(即 Sea.js 的 base 路径)来解析:

// 假设 base 路径是:http://example.com/assets/

// 在模块代码里:
require.resolve('gallery/jquery/1.9.1/jquery');
  // => http://example.com/assets/gallery/jquery/1.9.1/jquery.js

模块系统的基础路径即 base 的默认值,与 sea.js 的访问路径相关:

如果 sea.js 的访问路径是:
  http://example.com/assets/sea.js

则 base 路径为:
  http://example.com/assets/

当 sea.js 的访问路径中含有版本号时,base 不会包含 seajs/x.y.z 字串。 当 sea.js 有多个版本时,这样会很方便。

如果 sea.js 的路径是:
  http://example.com/assets/seajs/1.0.0/sea.js

则 base 路径是:
  http://example.com/assets/

所以使用相对标识可以写为:

<script type="text/javascript">
	seajs.use(['./a/a','./b/b']);
</script>

2.按需异步加载模块

使用require的异步接口require.async()

test.html

<input type="button" value="点击" id="btn">
<script type="text/javascript">
      seajs.use('./a/a');
</script>
a.js

define(function(require,exports,module){
	var btn = document.getElementById('btn');
	btn.onclick = function(){
		require.async("../b/b.js");
	}
})
b.js
define(function(require,exports,module){
	document.write("i am b");
})
加载test.html时只加载了a.js,在点击按钮之后才加载b.js。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值