使用seajs怎么开发一个JavaScript模块?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
首先看看<强> seajs是怎么进行模块开发强>的。使用seajs基本上只有一个函数“定义”
fn.define=,函数(id、 deps,,工厂),{//code of 函数… }
使用定义函数来进行定义一个模块,根据CMD(常见的模块定义)模块定义规范。一个文件就是一个模块,所以一个js文件中只有一个定义,即一个文件是一个模块,SeaJS中模块的概念有点类似于面向对象中的类——模块可以拥有数据和方法,数据和方法可以定义为公共或私有,公共数据和方法可以供别的模块调用。
官方实例中,定义只传入一个参数:一个工厂函数
定义(功能(需要, 出口,模块),{//code of 从而模块…… });
在看参数之前,我们先看看<强>定义是如何处理参数>强劲的:
fn.define =,函数(id, deps,,工厂)
定义可以接收的参数分别是模块id,依赖模块数组及工厂函数;
如果只有一个参数,则赋值给工厂。
如果有两个参数,第二个赋值给工厂;第一个如果是数组则赋值给deps,否则赋值给id。
如果有三个参数,则分别赋值给id, deps和工厂。
根据官方实例,建议还是根据官方的来就传递一个参数,即只有工厂参数,这样的话模块id默认为js文件路径。
在来看看工厂函数的参数:
要求,出口,模块
- <李>
要求——模块加载函数,用于记载依赖模块。通过这个参数来进行对其他模块的加载。
李> <李>出口——接口点,将数据或方法定义在其上则将其暴露给外部调用。通过这个参数,来将这个模块的方法进行暴露
李> <李>模块——模块的元数据。其是一个对象,有属性:
李>- <李>
module.id——模块的id。
李> <李>module.dependencies——一个数组,存储了此模块依赖的所有模块的id列表。
李> <李>module.exports——与出口指向同一个对象。
李>使用工厂的参数的使用:
定义(功能(需要, 出口,模块),{ var a =,要求(& # 39;。/一个# 39;);//引入一个模块, exports.fun2=, function () { 警报(“fun2"); a.dosomething (); }, }
使用需要对象来进行加载模块,其实使用正则表达式进行验证加载的,所以其参数必须是特定的字符串,不能是表达式。
seajs会自动在需要的参数中加入“.js"来进行加载,即不需要写上后缀名,但是在某些情况下,seajs不会为其添加“js”:
1。载入css:
要求(“。/module1-style.css");
2。路径中含有“?”:
要求”(& lt; a  href=https://www.yisu.com/zixun/http://example/js/a.json?b=函数外部nofollow“rel=> http://example/js/a.json?cb=func >);
3。路径以“#”结尾:
要求(http://example/js/a.json);
使用出口来向外部暴露方法,或者属性。暴露属性有几种方式,如上面中的例子是一种方式,另外还有:
使用返回:
定义(功能(需要) { var data1 =, 1,,//私有数据 var func1 =,()函数,{,//私有方法 returna.run (data1); }//暴露 返回{ data2:, 2, func2:函数(),{ 返回# 39;你好# 39;; } },, });
直接返回json对象:
定义({ 数据:1, 函数:函数(),{ 返回# 39;你好# 39;; } });
<强>页面中调用seajs 强>
前面说了seajs用来解决模块开发,和繁琐的文件依赖问题,所以所有的文件依赖都是通过需要对象进行加载,或者可以使用require.async(“/?来进行异步加载,即当使用到的时候才进行加载,
注:无论是()还需要是需要。异步()都可以有第二个参数为回调函数,当文件加载成功时调用:
require.async(& # 39;/道路//模块/文件# 39;,函数(m), {//code of 调…… });
有了这个加载依赖的方式,我们无需再页面上书写大量的& lt;脚本祝辞& lt;/script>标签,而仅仅使用一个
& lt; script src=https://www.yisu.com/zixun/薄?sea.js”data-main=啊?init”> 脚本>
即可,其中data-main=啊?init"为入口模块,表示加载这个模块,在进行迭代加载其所依赖的模块,使用这个属性可以省略seajs.use。这个后面说。