美文网首页
模块化开发 CMD seajs

模块化开发 CMD seajs

作者: squidbrother | 来源:发表于2020-07-21 22:58 被阅读0次
    概述

    基于CMD标准的web模块化开发语言
    当页面上加载js库,超过3个时候,可以使用,便于项目后期维护

    官网
    下载地址
    CMD规范

    快速上手杂记 ( Sea.js 3.0.3 | seajs.org/LICENSE.md - 最新版本)

    1.创建项目,引入seajs
    如 index.html

    <script src='sea_3.0.3.js'></script>
    

    2.添加入口文件,main.js
    js类型文件敏感,后缀名可以省略

    <script>
      seajs.use('module/js/main');
    </script>
    

    3.定义模块与引入模块
    路径module/js/ - 新建main.js与modA.js
    main.js

    define(function(require,exports,module){
        var sumFn = require('module/js/modA').sumFn;
        console.log(sumFn(1,2)); 
    });
    

    4.导出模块
    modA.js

    define(function(require,exports,module){
      function sumFn(a,b){
        return a+b;
      }
    
      module.exports.sumFn = sumFn;
    });
    
    补充与细节

    1.定义与返回模块

    通过define来定义模块,其中define接收3个参数

    define('id', [], function(require, exports, module) {
    ...
    });
    

    默认如果不加ID,没有引用,则直接可以定义第三个参数
    第三个参数,如果定义非function,则为返回值
    如:

    define(123);
    define('hello');
    define(true);
    ...
    

    如果定义模块为函数形,需要返回值,如果没有返回值,则为null
    返回值的方式:
    1-1. exports方式

    define(function(require,exports,module){
      module.exports.a = xxx;
      module.exports.b = xxx;
    });
    

    1-2

    define(function(require,exports,module){
      function fn1(){
        ...
      };
    
      return fn1;
    });
    

    注: 所有模块的引用路径,都是相对sea.js文件,而非html文件

    2.模块添加有ID的模块时候

    导出

    define(‘模块的ID名'’,function(require,exports,module){
      module.exports = 'xxxxxx';
    });
    

    引用

    define(['被引用模块路径'], function(require,exports,module){
      var txtMes = require('模块的ID名');
      console.log(txtMes); //xxxxxx
    });
    

    3.异步引入模块

    define(function(require){
        require.async(['路径'],function(){
            console.log(arguments);
        })
    });
    
    1. 各种TIPS
    1. exports 是 module.exports的一个引用,如果要导出,需要对module.exports进行挂载属性或者赋值
    2. 不可以直接对exports进行赋值,这样会打乱引用关系
    3. 条件判断中 在非中使用require会加载,但是使用require.async则不会加载
    seajs配置
    1. alias 别名使用
    seajs.config({
        alias:{
            'jquery':'/xxx/xxx/jquery'
        }
    });
    
    1. path 批量路径修改
      区别与alias,path会将所有aaa/bbb的路径替换为'js'
    seajs.config({
        path:{
            'js':'aaa/bbb'  
        }
    });
    

    3.map 简化文件路径 - 是一种映射关系
    map对应一个二维数组,每一个子数组,第一项是简化之后的字符串,第二项是被简化的字符串
    例如:
    将module/js/a.js 简化为 a

    seajs.config({
        map:[
            [ 'a','module/js/a' ]
        ]
    });
    
    插件
    1. 引入seajs-css.js,通过script标签方式
      就可以通过引入的方式加载css文件了,seajs只对js文件敏感,其他类型文件不得省略后缀名
    <script src="sea.js"></script>
    <script src="seajs-css.js"></script>
    <script>
        seajs.use('css/style.css');
    </script>
    

    2.预加载插件
    通过script标签引入 seajs-preload.js

    seajs.config({
      preload: ['js/jquery-3.4.1'];
    });
    
    //通过seajs.use来触发preload
    //且会先加载preload里的内容,再加载真正内容,如 `js./a.js`
    seajs.use('js/a'); 
    

    相关文章

      网友评论

          本文标题:模块化开发 CMD seajs

          本文链接:https://www.haomeiwen.com/subject/fryikktx.html