seajs和requirejs模块化简单案例分析


Posted in Javascript onAugust 26, 2019

本文实例讲述了seajs和requirejs模块化。分享给大家供大家参考,具体如下:

如今,webpack、gulp等构件工具流行,有人说seajs、requirejs等纯前端的模块化工具已经被淘汰了,我不这么认为,毕竟纯前端领域想要实现模块化就官方来讲,还是有一段路要走的。也因此纯前端的模块化工具依然有价值,而且就我了解一些中小企业一直都在用纯前端的模块化手段。

如今,重新关注seajs和requirejs,不求理解多么深刻,要求会用能用就可以。

模块化的起因是传统的直接引入js方法存在问题:

  1. 必须通过全局变量共享模块,有可能会出现命名冲突的问题;
  2. 依赖的文件必须手动地使用标签引入到页面中。

下面是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="./js/sea.js"></script>
  <script type="text/javascript">
       seajs.use('./js/main');
  </script>
</body>
</html>

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="./js/require.js"></script>
</body>
</html>

关于导出接口有三种,分别是exports,用来导出变量;然后是module.exports用于导出对象;最后是return直接返回。

最后对seajs和requirejs的不通点做个总结,选择seajs作者github:

  1. 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
  2. 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
  3. 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  4. 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
  5. 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。

个人总结的不同是:

CMD,seajs 推崇依赖就近,AMD ,requirejs推崇依赖前置,实际是两者在简单实现上,是可以一致的。就比如本文的例子。

seajs比如requirejs小很多。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
Nov 21 Javascript
再次分享18个非常棒的jQuery表格插件
Apr 10 Javascript
actionscript与javascript的区别
May 25 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
js加入收藏以及使用Jquery更改透明度
Jan 26 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
使用JQuery FancyBox插件实现图片展示特效
Nov 16 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
Jul 06 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 Javascript
JavaScript实现身份证验证代码实例
Aug 26 #Javascript
基于vue、react实现倒计时效果
Aug 26 #Javascript
tweenjs缓动算法的使用实例分析
Aug 26 #Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 #Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 #Javascript
小程序实现层叠卡片滑动效果
Aug 26 #Javascript
微信小程序 数据缓存实现方法详解
Aug 26 #Javascript
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
javascript 写类方式之五
2009/07/05 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python 把数据 json格式输出的实例代码
2016/10/31 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python range与enumerate函数区别解析
2020/02/28 Python
sklearn的predict_proba使用说明
2020/06/28 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
你对IPv6了解程度
2016/02/09 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
档案检查欢迎词
2014/01/13 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
2014年市场部工作总结
2014/11/25 职场文书
实习证明模板
2015/06/16 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android