使用seajs怎么开发一个JavaScript模块

  介绍

使用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。这个后面说。

使用seajs怎么开发一个JavaScript模块