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 Ajax功能时需要注意的一个问题(内存溢出)
May 30 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
JavaScrip数组删除特定元素的几种方法总结
Sep 06 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
Vue2.0点击切换类名改变样式的方法
Aug 22 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
利用PHP动态生成VRML网页
2006/10/09 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
python破解zip加密文件的方法
2018/05/31 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
如何利用find命令查找文件
2016/11/18 面试题
业务部主管岗位职责
2014/01/29 职场文书
应聘英语教师求职信
2014/04/24 职场文书
工作经历证明书范文
2014/11/02 职场文书
门卫岗位职责
2015/02/09 职场文书
2015年化验员工作总结
2015/04/10 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
二十年同学聚会感言
2015/07/30 职场文书
志愿者工作心得体会
2016/01/15 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python