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 相关文章推荐
js的一些常用方法小结
Jun 29 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
Jun 22 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
Nov 24 Javascript
基于input框覆盖掉数字英文的实例讲解
Jul 21 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php上传文件问题汇总
2015/01/30 PHP
php日期操作技巧小结
2016/06/25 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
护理专业学生的求职信范文
2013/12/11 职场文书
大学班级学风建设方案
2014/05/01 职场文书
大班亲子运动会方案
2014/06/10 职场文书
社区两委对照检查材料
2014/08/23 职场文书
入伍通知书
2015/04/23 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python