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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
测试你的JS的掌握程度的代码
Dec 09 Javascript
在父页面调用子页面的JS方法
Sep 29 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
配置eslint规范项目代码风格
Mar 11 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
layui扩展上传组件模拟进度条的方法
Sep 23 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 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
职工运动会感言
2014/02/07 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
药店采购员岗位职责
2014/09/30 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android