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 相关文章推荐
javascript 操作文件 实现方法小结
Jul 02 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
javascript中alert()与console.log()的区别
Aug 26 Javascript
jQuery实现商品活动倒计时
Oct 16 Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
js实现产品缩略图效果
Mar 10 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
微信小程序如何实现五星评价功能
Oct 15 Javascript
JavaScript实现轮播图效果
Oct 30 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 n个不重复的随机数生成代码
2009/06/23 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
vue中监听返回键问题
2019/08/28 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
pandas删除指定行详解
2019/04/04 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
物业管理个人自我评价
2013/11/08 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
图书馆标语
2014/06/19 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
工作态度检讨书范文
2015/05/06 职场文书
婚姻出轨保证书
2015/05/08 职场文书
课题研究阶段性总结
2015/08/13 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书