位置: 编程技术 - 正文

JavaScript模块化开发之SeaJS(javascript模块化与非模块化开发区别)

编辑:rootadmin

推荐整理分享JavaScript模块化开发之SeaJS(javascript模块化与非模块化开发区别),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js的模块化可以怎么做,javascript 模块化,javascript模块化与非模块化开发区别,js模块化开发教程,js的模块化可以怎么做,javascript模块化与非模块化开发区别,javascript模块化规范,javascript模块化规范有哪些,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

&#;&#;SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混乱和代码纠缠等问题,方便代码的编写和维护。

SeaJS本身遵循KISS(Keep it Simple,Stupid)理念进行开发,后续的几个版本更新也都是吵着这个方向迈进。

如何使用SeaJS

下载及安装在这里不赘述了,不了解的请查询官网。

基本开发原则 &#;一切皆为模块:SeaJS中的模块概念有点类似于面向对象中的类--模块可以拥有数据和方法,数据和方法可以定义为公共或私有,公共数据和方法可以供别的模块调用。

&#;每个模块应该都定义在一个单独的js文件中,即一个对应一个模块。

模块的定义和编写

模块定义函数define

SeaJS中使用define函数定义一个模块。define可以接收三个参数:

define可以接收的参数分别是模块ID,依赖模块数组及工厂函数。

&#;如果只有一个参数,则赋值给factory

&#;如果有两个参数,第二个赋值给factory,第一个如果是数组则赋值给deps,否则赋值给id

&#;如果有三个参数,则分别赋值

但是,包括SeaJS官网示例在内几乎所有用到define的地方都只传递一个工厂函数进去,类似于如下代码:

个人建议遵循SeaJS官方示例的标准,用一个参数的define定义模块。那么id和deps会怎么处理呢?

&#;&#;id是一个模块的标识字符串,define只有一个参数时,id会被默认赋值为此js文件的绝对路径。如example.com下的a.js文件中使用define定义模块,则这个模块的ID会赋值为 ,没有特别的必要建议不要传入id。deps一般也不需要传入,需要用到的模块用require加载即可。

工厂函数factory解析

&#;&#;工厂函数是模块的主体和重点。它的三个参数分别是:

&#;require:模块加载函数,用于记载依赖模块 &#;exports:接口点,将数据或方法定义在其上则将其暴露给外部调用 &#;module:模块的元数据

这三个参数可以根据需要选择是否需要显示指定。

module是一个对象,存储了模块的元信息,具体如下: &#;module.id:模块的ID &#;module.dependencies:一个数组,存储了此模块依赖的所有模块的ID列表。 &#;module.exports:与exports指向同一个对象

三种编写模块的模式

第一种是基于exports的模式:

JavaScript模块化开发之SeaJS(javascript模块化与非模块化开发区别)

上面是一种比较“正宗”的模块定义模式。除了讲公共数据和方法附加在exports上,也可以直接返回一个对象表示模块,如下面的代码与上面的代码功能相同:

如果模块定义没有其他代码,只返回一个对象,还可以有如下简化写法:

第三种写法对于定义纯JSON数据的模块非常合适。

根据应用场景的不同,SeaJS提供了三个载入模块的API,分别是:seajs.use,require和require.async。

seajs.use

seajs.use主要用于载入入口模块。入口模块相当于C语言的main函数,同时也是整个模块依赖树的根。seajs.use 的用法如下:

其中多模块的用法和KISSY中的模块加载方法类似,不亏是一个人写的啊!

一般seajs.use只用在页面载入入口模块,SeaJS会顺着入口模块解析所有依赖模块并将它们加载。如果入口模块只有一个,也可以通过给引入seajs的script标签加入“data-main”属性来省略seajs.use,例如一下写法:

require是seajs主要的模块加载方法,当在一个模块中需要用到其他模块时一般用require加载:

上文说过seajs会在html页面打开时通过静态分析一次性记载所有需要的js文件,如果想要某个js文件在用时才加载,可以使用require.async。

这样只有在用到这个模块时,对应的js文件才会被下载,也就实现了JavaScript代码的按需加载。

SeaJS的全局配置

seajs提供了一个seaj.configd的方法可以设置全局配置,接收一个表示全局配置的配置对象,具体方法如下:

其中,

&#;base表示基址路径 &#;alias可以对较长的常用路径设置缩写 &#;charset表示下载js时script标签的charset属性。 &#;timeout表示下载文件的最大时长,以毫秒为单位。

Seajs如何与现有的JS库配合使用

要将现有的JS库与seajs一起使用,只需根据seajs的模块定义规则对现有库进行一个封装。例如,下面是对jQuery的封装方法:

一个完整的例子:

上文说了那么多,知识点比较分散,所以最后我打算用一个完整的SeaJS例子把这些知识点串起来,方便朋友们归纳回顾。这个例子包含如下文件: &#;index.html 主页面

&#;sea.js &#;jquery.js &#;init.js init模块,入口模块,依赖data、jquery、style三个模块,又主页面载入 &#;data.js data模块,纯json数据模块 &#;style.css css样式表

请注意:

1.请讲jquery.js源码文件包含在seajs模块加载代码中;

2.在Sea.js < 2.3.0版本之前是可以加载css文件的,新版本中此功能移除,为了兼容考虑,加载css功能将作为一个插件存在。

使用方法

&#;可以在sea.js标签后引入这个插件使用 &#;也可以将插件代码混入sea.js当中 &#;和seajs-style的区别 &#;seajs-css是使 Sea.js 能够加载一个css文件,和link标签一样 &#;seajs-style是指提供一个seajs.importStyle方法用于加载一段 css 字符串

以上内容是小编给大家分享的JavaScript模块化开发之SeaJS,希望对大家学习javascript模块化开发有所帮助,谢谢大家一直以来对积木网网站的支持。!

JavaScript代码判断点击第几个按钮 最近很轻松,项目结束,趁个空余时间写了一段javascript代码实现判断点击第几个按钮的相关代码,具体代码如下所示:htmlheadmetacharset='utf-'/headbodybutton

JavaScript判断按钮被点击的方法 废话不多说了,直接给大家贴代码了。firfox版:HTMLmetahttp-equiv="Content-Type"content="text/html;charset=utf-8"/HEADTITLE/TITLEscriptdocument.onclick=function(e){varevt=e||window.eve

分享Javascript实用方法二 JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用

标签: javascript模块化与非模块化开发区别

本文链接地址:https://www.jiuchutong.com/biancheng/387205.html 转载请保留说明!

上一篇:JavaScript 模块的循环加载实现方法(javascript模块化)

下一篇:JavaScript代码判断点击第几个按钮(js判断ua)

  • 出售投资性房地产取得的收入
  • 出差误餐补助是谁承担
  • 办公楼出租价格怎么算
  • 公司租用其他公司车辆能报销保险费吗,发票怎么开
  • 采购成本和销售费用区别
  • 以前年度损益调整账务处理分录
  • 计提工资是包含社保吗
  • 增值税期末余额在哪方
  • 外债利息支付需要按照天计算吗?
  • 电信电话费计入成本吗
  • 库存商品损失怎么做账
  • 应交税费明细分类账
  • 年前买东西
  • 折扣销售的增值税处理方式
  • 冲销暂估材料怎么做账
  • 软件销售购销合同
  • 股权投资类企业税收政策
  • 公司买了股票怎么做账
  • 出口退税为0的产品明细
  • 小规模纳税人附加税税率各是多少
  • 营改增后自产产品用于在建工程
  • 提示涉税风险该怎么弄
  • 回扣费可以税前扣除吗?
  • 税控设备实际抵减增值税时如何做分录?
  • 利息支出企业所得税税前扣除标准
  • 非税收入的发票能抵扣吗
  • 生产人员社保计入哪个科目
  • 工地没有手续擅自开工违法吗
  • 职工福利费要申报吗
  • 增值税发票已认证抵扣还可以进项税额转出吗
  • 上月未计提税费,本月可以补计提吗
  • ie异常
  • linux如何开启端口
  • 小规模减免的增值税汇算清缴
  • macos big sur更新后能改回来吗
  • ipad哪款最贵
  • 将款项汇往外地采购专用账户会计分录
  • 查验发票张数超过限制
  • 企业所得税的基本税率是多少?
  • 红字发票怎么填申报表表二
  • 应付帐款借方余额怎么算
  • 显示国家税务总局东莞分局打来电话是诈骗还是正规电话
  • ai生成图形
  • php access_token
  • 小规模纳税人房产税优惠政策2023
  • 电力系统培训计划
  • 出口收汇手续费做什么科目
  • 今天收到的
  • 合并报表存货的计税基础
  • 一个分组名称
  • 销售边角料税率是多少
  • 合作经营利润分配协议
  • 餐饮业燃气费计入什么科目
  • 商业承兑背书后怎么办
  • 销售返利如何做账
  • 差旅费包干管理办法
  • 联营企业和子公司哪个好
  • 在长期股权投资中,如何理解控制、重大影响?
  • 代扣代缴的增值税为什么可以抵扣
  • 企业流动负债比率多少算正常
  • sql server自动增长方式
  • sqlserver数据库怎么导出
  • 如何关闭windows密钥
  • win7系统开机后桌面黑屏
  • 自定义ui界面
  • cocos2dx 教程
  • python语言基础与应用答案
  • 在动画制作中一般默认帧数选择为
  • unity3d初学者教程视频
  • node web 框架
  • ie不支持p标签
  • jquery实现移动端
  • nodemodules拷贝到其他目录
  • js jquery区别
  • unity控制三维模型
  • 2015年5-6月关于Android用户隐私保护的3篇顶级论文【2015.5-2015.6】
  • javascript面向对象编程指南
  • 淄博市地税局局长
  • 湖南省国家电子税务局官网
  • 民办非企业需要办理税务登记吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设