初识seaJs,大型项目中优势明显

seaJS就是根据commonJS组织规范写的一个加载器。使用seaJs;seaJS环境中javascript的写法——模块化;模块化案例

初识seaJs,大型项目中优势明显

一、初识seaJs

sea.js是一个加载器,是淘宝前端攻城师玉伯所著,他是根据commonjs规范的一种表现。何为commonJS?commonJs可以理解成一个组织,他们中的所有人都致力于提高javascript程序的可移植性以及可交互性。这种可移植性以及可交互性不仅仅局限于浏览器端,而且也包括了服务器端的javascript.

那seaJS到底是什么呢?seaJS就是根据commonJS组织规范写的一个加载器。其内部可API并不多主要有以下几个:alias,config,use,define。主要就这四个API。seaJS主要就是根据这四个API对其环境中的javascript进行管理的。那么seaJS是如何对其环境中的代码管理的?

在先前的页面中,不管前端程序员还是后端程序员,在他们需要某一个js的时候,有人可能会直接写行内js,而有些人则习惯于从外部引入js文件。项目后期维护的时候,杂乱的页面不仅加大了维护的成本,而且维护起来也很不方便。这个时候就可以用seaJS来维护我们的这杂乱无序的js文件。

seaJS的利是远大于弊的,这个至少在大项目中可以体现。在比较小的项目中seajs还是舍弃比较好啊,可能会出现适得其反的效果。大家在使用之前一定要做好前期评估。

那到底如何使用seaJS呢?

二、使用seaJs

在使用seaJS之前难免一定要先引入它,就如我们使用jquery一样。

1、seaJS环境中javascript的写法——模块化

模块化?何为模块化?在seaJS中的所有javascript都必须要依据模块化的书写格式。这又是什么意思?其实,seaJS在管理文件的过程中是根据javascript(这里我们先讨论seaJS对javascript的管理,对于CSS的管理我们后面再做讨论)的文件名进行管理的,这个文件名就相当于我们平时所说的命名空间。在调用文件的时候我们可以直接写文件名而不需要写它的后缀。但是也是有特殊情况的:

a.加载css的时候一定要加后缀的

b.路径中有”?“的时候javascript文件的后缀不能省略

c.路径中是以“#”号结尾的文件也不可以省去后缀

到底如何模块化一个javascript?这个时候就要用到我们seaJS提供的几个接口了,模块化使用define函数,如下:

define(id,deps,factory)

id:模块id,可以自己赋值,如果不赋值默认就是该函数的相对路径,各位可以调试看看

deps:当前模块所依赖的模块,这里关键就是按需加载了,将你需要的js文件引入

factory:模块工厂函数,这个函数是重点,主要是模块的逻辑实现

2、模块化案例

说了这么多,肯定还是有人是云里雾里,那么我们就给出一个具体例子:

moduleA.js:

define(function(require,exports,module){     //这里开始,你可以随意书写你的js代码,声明变量,定义函数,做任何你想做的事 }) 

define(function(require,exports,module){    

//这里开始,你可以随意书写你的js代码,声明变量,定义函数,做任何你想做的事

}) 

不是说模块化后就能按需加载么?按需加载后,我怎么去调用模块化后文件内的方法呢?是的,这个问题就牵涉到了我们define函数的参数——内部工厂函数

function(require,exports,module){},这个函数的三个参数在书写的时候不能写错,不能改变这三个参数的任意一个字母(强制性)。但是这三个参数中的require和module是可以省略的,这个不是我们本期讨论的话题。言归正传:

moduleB.js:

define(function(require,exports,module){ //这里开始代码var a=”hello world!”     exports.getA=function(){return a;}

}) 

现在我们拿上面的moduleB和moduleA进行简单的seajs的模块化管理:

如果moduleA也需要拥有moduleB中一样的getA方法。以前大家都是直接在moduleA中也加一个方法getA,这样明显在重复“造轮子”,为什么我们不去拿别人先前已经写好了的呢?所以,我们在seajs的环境中可以进行下面的操作

moduleA:

define(function(require,exports,module){

  var moduleb=require(“moduleB”)

  //这样后就要可以调用moduleB.js中的getA方法了

  moduleb.getA();//”hello world!”

}) 

seajs管理代码模块基本就是这种流程,对于define内的工厂函数,我们在写模块的时候一定要注意一下几点:

1、require,exports,module这三个参数不能写错

2、require:是用来引入相关模块的,就如按需加载,需要哪一个模块就require进来,然后就可以利用这个模块中的方法了,前提是如果要使用require进来的模块中的代码那么这个模块中的公用函数就必须要定义在exports中

3、exports:用来定义包含外部公用的一些内容,包括变量,函数等。这个也可以理解成与其他模块的接口。

4、module:模块的元数据,他本身是一个对象,拥有对象的一切特性(原型对象等)

这样的描述是对seaJS的一个小规模的使用方法,其实seaJS内部包含了很强大的用处,各位可以查看seaJS官网文档:http://www.seajs.com

后面我将逐步开始分析如何使用seaJS以及在使用的注意点

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年5月3日 13:03:33
下一篇 2024年5月3日 13:05:37

相关推荐

  • aspexcel未找到项目,xlsread未找到工作表

    ASP读取EXCEL有某一列的数据读取不到,显示为空? 1、可以考虑采用“ewebeditor”控件,我用的asp版本,刚好在做一个excel倒入项目,不过还在纠结如何读取xls中单元格内容的超链接。 2、if not (rsexcel.bof and rsexcel.eof)while do 比较乱。我模仿你的思路成功了。 3、rst(语文)=rs(2)r…

    2024年5月23日
    4600
  • java获取项目上传路径,java获取项目根路径

    java获取当前项目的路径 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 也可以选用System.getProperty(user.dir)获取工程的绝对路径。 getClass().getResource() 方法获得相对路径( 此方法在jar包中无效。 File类有两个常用方法可以得到文件…

    2024年5月23日
    4300
  • java中ra项目,idea创建java项目

    用java定义一个一维数组,其中随机生成500个1到50之间整数,输出出现最多… Math类的random()方法可以生成[0,1)之间的随机浮点数。double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失。int b=(int)(Math.random()*10);//生成[0,9]之间的随机整数。 …

    2024年5月22日
    3900
  • java项目经验模板,Java项目经验

    Java软件开发工程师个人简历模板 1、扎实的JAVA基础知识,熟悉面向对象编程思想,熟练MVC设计模式。 2、年应届毕业生个人简历模板(一) 姓名:xxx 性别:xx 年龄:xx 学历:本科 毕业院校:xxx 专业:xxx 电子邮箱:xxx 联系电话:xxx 通信地址:xxx 毕业院校:xxx 主修课程: 汇编语言程序设计、JAVA程序设计、数据库原理、操…

    2024年5月22日
    5200
  • jboss开机自动启动linux,linux开机自启动java项目

    linux设置开机自启动脚本的最佳方式 1、使用systemctl工具:这是Linux系统中推荐的配置服务开机启动的方式,但是您提到在V10系统中systemctl无法正常启动服务,所以此方法不适用。 2、修改开机启动文件:/etc/rc.local(或者/etc/rc.d/rc.local)自己写一个shell脚本 将写好的脚本(.sh文件)放到目录 /e…

    2024年5月22日
    4600
  • idea切换java版本,idea项目切换jdk

    idea中如何指定java目录 我是这样做的 我先在D盘新建了一个叫java idea的文件夹,然后在idea创建java项目时,如果只改项目名,idea只会在D盘里直接新建一个和项目名同名的文件夹,所以先不改项目名。 intellijidea配置jdk的详细操作方法首先点击File下的Project的菜单。再点击SDKs这个选项开始指定jdk的位置。若是第…

    2024年5月22日
    5400
  • javaweb项目引用不到lib下的包,idea引用不到本地的jar

    java项目导入jar包 是的,Java中的StringEntity类是org.apache.http.entity.StringEntity,属于Apache HttpClient库的一部分,因此在使用它之前,需要将HttpClient的jar包导入到您的项目中。 方法一:直接复制想要的jar包,之后找到项目的lib路径,之后“Ctrl+v”粘贴进行就可以…

    2024年5月22日
    4100
  • javaweb母版,javaweb项目模板

    javaEE和javaweb的区别? 1、JavaSE(JavaPlatform,StandardEdition)。JavaSE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。 2、你说的javaee就是j2ee,与j2se,j2me并列,j2ee是java面向企业级应用推出的一套规范,说白了就是用于开发服务器…

    2024年5月22日
    5300
  • java项目导入到运行,java 导入项目

    如何将下载的java源代码导入到eclipse中运行 1、找到java项目所在的文件夹。如果我的项目位于名为Servlet的文件夹中,那么我需要找到Servlet文件夹。找到这个文件夹后,我们需要打开eclipse。单击下面显示的内容开始导入我们之前编写的java项目。 2、首先,下载github上的Java代码,然后打开eclipse,在左边的工程栏,鼠标…

    2024年5月21日
    3800
  • c语言开发软件,c语言开发软件的优势

    用什么软件编写c语言 常用的c语言编程软件有:devc++是比较容易上手的编程软件,优点是功能简洁,页面简洁。 c语言编程软件包括:Code Blocks、Eclipse、CLion、Microsoft Visual C++ 、Microsoft Visual Studio、WaTCom C++、NetBeans、Atom、PlatformIO、Sublim…

    2024年5月21日
    6500

发表回复

登录后才能评论



关注微信