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 相关文章推荐
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
Feb 14 Javascript
浅析javascript操作 cookie对象
Dec 26 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
JS实现新建文件夹功能
Jun 17 Javascript
VueJS 取得 URL 参数值的方法
Jul 19 Javascript
vue按需加载实例详解
Sep 06 Javascript
VSCode launch.json配置详细教程
Jun 18 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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目录导航文件代码
2006/10/09 PHP
php相当简单的分页类
2008/10/02 PHP
php牛逼的面试题分享
2013/01/18 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
深入浅析Python的类
2018/06/22 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Python tkinter三种布局实例详解
2020/01/06 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
Python如何合并多个字典或映射
2020/07/24 Python
python数据抓取3种方法总结
2021/02/07 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2015新学期开学寄语
2015/02/26 职场文书
总结会主持词
2015/07/02 职场文书
2015年国庆节寄语
2015/08/17 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript