本文实例讲述了seajs和requirejs模块化。分享给大家供大家参考,具体如下:
如今,webpack、gulp等构件工具流行,有人说seajs、requirejs等纯前端的模块化工具已经被淘汰了,我不这么认为,毕竟纯前端领域想要实现模块化就官方来讲,还是有一段路要走的。也因此纯前端的模块化工具依然有价值,而且就我了解一些中小企业一直都在用纯前端的模块化手段。
如今,重新关注seajs和requirejs,不求理解多么深刻,要求会用能用就可以。
模块化的起因是传统的直接引入js方法存在问题:
- 必须通过全局变量共享模块,有可能会出现命名冲突的问题;
- 依赖的文件必须手动地使用标签引入到页面中。
下面是seajs和requirejs的简单案例。
seajs 我用的seajs版本是2.2.3
html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>极客学院首页</title> </head> <body> <button id="testbtn0">测试按钮0</button> <button id="testbtn1">测试按钮1</button> <script type="text/javascript" src="/UploadFiles/2021-04-02/sea.js">main.js文件
define(function(require,exports,module){ //引入两个js文件 require("test0"); require("test1"); })test0.js
define(function(require,exports,module){ var $$=require("common").$$; var testbtn0=$$("#testbtn0"); testbtn0.addEventListener("click",function(e){ alert(e.target.innerText); }); })test1.js
define(function(require, exports, module) { var $$ = require("common").$$; var testbtn1 = $$("#testbtn1"); testbtn1.addEventListener("click", function(e) { alert(e.target.innerText); }); })coomm.js
define(function(rerquire,exports,module){ /*//第一种导出方案 exports.$$=function(tag){ return document.querySelector(tag); }*/ //第二种导出方案 module.exports={ $$:function(tag){ return document.querySelector(tag); }, test:"测试数据" } //第三种导出方案 /* return { $$:function(tag){ return document.querySelector(tag); }, test:"测试数据" }*/ })以上是为seajs的,而requirejs的直接就是该一下html文件就可以了,真是哭笑不得啊。才发现二者是通过的。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>极客学院首页</title> </head> <body> <button id="testbtn0">测试按钮0</button> <button id="testbtn1">测试按钮1</button> <script type="text/javascript" data-main="./js/main" src="/UploadFiles/2021-04-02/require.js">关于导出接口有三种,分别是exports,用来导出变量;然后是module.exports用于导出对象;最后是return直接返回。
最后对seajs和requirejs的不通点做个总结,选择seajs作者github:
- 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
- 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
- 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
- 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
- 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。
个人总结的不同是:
CMD,seajs 推崇依赖就近,AMD ,requirejs推崇依赖前置,实际是两者在简单实现上,是可以一致的。就比如本文的例子。
seajs比如requirejs小很多。
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
更新动态
- 张玮伽《微风细雨DSD》发烧大碟[WAV+CUE][1.1G]
- 群星《2024好听新歌14》十倍音质 U盘音乐 [WAV分轨][966M]
- s14全球总决赛T1战队队员都有谁 LOLs14全球总决赛T1战队介绍
- 英雄联盟faker身价有10亿吗 英雄联盟faker身价介绍一览
- faker大魔王称号怎么来的 faker大魔王称号来源介绍
- PS5 Pro上的蒂法更美了!博主盛赞新机1000%值得购买
- 腾讯互娱再离职一员大将!或因供应商贪腐
- Ayaneo3游戏掌机预热:旗舰定位、造型圆润自带底键
- 动力火车.1999-背叛情歌【上华】【WAV+CUE】
- 刘力扬.2019-Neon.Lit虹【摩登天空】【FLAC分轨】
- 群星.2002-恋爱物语情歌对唱精选2CD(引进版)【滚石】【WAV+CUE】
- 群星《闽南情24K德国HD金碟》2CD[WAV+CUE]
- 周传雄《恋人创世纪》环球唱片[WAV+CUE]
- 关淑怡-《真假情话K2HD》(日本压制)【WAV+CUE】
- 王菲 -《Faye Wong》雨果LPCD45 [WAV+分轨][1G]