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 相关文章推荐
jQuery获取css z-index在各种浏览器中的返回值
Sep 15 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
由Javascript实现的页面日历
Nov 04 Javascript
js下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 Javascript
angular4实现tab栏切换的方法示例
Oct 21 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python生成词云的实现代码
2020/01/14 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Django celery异步任务实现代码示例
2020/11/26 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
父母对孩子说的话
2014/04/12 职场文书
教师考核材料
2014/05/21 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书