• seaj和requirejs模块化的简单案例


    如今,webpack、gulp等构件工具流行,有人说seajs、requirejs等纯前端的模块化工具已经被淘汰了,我不这么认为,毕竟纯前端领域想要实现模块化就官方来讲,还是有一段路要走的。也因此纯前端的模块化工具依然有价值,而且就我了解一些中小企业一直都在用纯前端的模块化手段。

    如今,重新关注seajs和requirejs,不求理解多么深刻,要求会用能用就可以。

    模块化的起因是传统的直接引入js方法存在问题:

    1. 必须通过全局变量共享模块,有可能会出现命名冲突的问题;
    2. 依赖的文件必须手动地使用标签引入到页面中。

    下面是seajs和requirejs的简单案例。

    seajs 我用的seajs版本是2.2.3

    html部分

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>极客学院首页</title>
     7 </head>
     8 
     9 <body>
    10     <button id="testbtn0">测试按钮0</button>
    11     <button id="testbtn1">测试按钮1</button>
    12     <script type="text/javascript" src="./js/sea.js"></script>
    13     <script type="text/javascript">
    14 
    15              seajs.use('./js/main');
    16 
    17     </script>
    18 </body>
    19 
    20 </html>

    main.js文件

    1 define(function(require,exports,module){
    2    //引入两个js文件
    3    require("test0");
    4    require("test1");
    5 
    6 })

    test0.js

    1 define(function(require,exports,module){
    2     var $$=require("common").$$;
    3 
    4     var testbtn0=$$("#testbtn0");    
    5     testbtn0.addEventListener("click",function(e){
    6         alert(e.target.innerText);
    7     });
    8 })

    test1.js

    1 define(function(require, exports, module) {
    2     var $$ = require("common").$$;
    3     var testbtn1 = $$("#testbtn1");
    4     testbtn1.addEventListener("click", function(e) {
    5         alert(e.target.innerText);
    6     });
    7 })

    coomm.js

     1 define(function(rerquire,exports,module){
     2     /*//第一种导出方案
     3    exports.$$=function(tag){
     4            return document.querySelector(tag);
     5  
     6    }*/
     7    //第二种导出方案
     8    module.exports={
     9          $$:function(tag){
    10             return document.querySelector(tag);
    11          },
    12          test:"测试数据"
    13    }
    14    //第三种导出方案
    15   /* return {
    16          $$:function(tag){
    17             return document.querySelector(tag);
    18          },
    19          test:"测试数据"
    20    }*/
    21  
    22 })

    以上是为seajs的,而requirejs的直接就是该一下html文件就可以了,真是哭笑不得啊。才发现二者是通过的。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>极客学院首页</title>
     7 </head>
     8 
     9 <body>
    10     <button id="testbtn0">测试按钮0</button>
    11     <button id="testbtn1">测试按钮1</button>
    12     <script type="text/javascript" data-main="./js/main" src="./js/require.js"></script>
    13 
    14 </body>
    15 
    16 </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小很多。

    本文结束。

    2019年7月21日 

    今天回顾了requirejs的使用,突然明白作者为什么不更新了。webpack确实是一种更高层次的模块化升级。

  • 相关阅读:
    Mac 安装FFMpeg 与 FFmpeg 格式转换
    django channels
    python3 coroutine
    python中关于sql 添加参数
    python导包的问题
    python中的列表
    django中用model生成数据库表结构
    docker
    博客大神地址
    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
  • 原文地址:https://www.cnblogs.com/zhensg123/p/8848168.html
Copyright © 2020-2023  润新知