Sea.js 三分钟快读入门

引言


这篇文章是写给前端刚刚入门的小猿们的,大神请绕路,嗷嗷~
因为公司的项目中一直在用Sea.js,从而接触到了前端模块化的一些东西。刚接触的时候,觉得“模块”很像是java当中“类”的概念;
我想很多刚入门的小猿们,和我刚入门时候的代码习惯是一致的,将自己的逻辑代码从上到下写在一个js文件中(ps:哈哈,中枪没:-)这样做的弊端呐,就是可维护性不高,当我们想要回过头来修改某个需求和逻辑的时候就会发现,几个月前自己明明思路清晰的逻辑,忘得差不多了,只能从头再读一遍自己的代码咯,浪费时间唉有木有~
Sea.js创始人玉伯给SeaJs的定义是:”它只解决了一个问题就是前端代码的模块化,一个模块就是一个文件”
通过Sea.js,我们可以将大量JavaScript代码封装成一个个小模块,然后就能实现模块的加载和依赖管理,让每一个模块的代码只解决唯一的某个问题。废话不多说,下面简单介绍一下SeaJs。


Sea.js的发展史


Sea的产生是由于CMD规范的出现,CMD又是由CommonJS的基础上发展而来,那咱们先简单说说CommonJS。大概 09 年 – 10 年期间,CommonJS 社区大牛云集。CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在Node.js 环境下取得了很不错的实践。09年下半年这帮牛逼爱折腾的大神们想把 ServerJS 的成功经验进一步推广到浏览器端,于是将社区改名叫 CommonJS,同时激烈争论 Modules 的下一版规范。分歧和冲突由此诞生,逐步形成了三大流派:Modules/1.x (完全基于1.0的功能,只是增加一个转换功能),Modules/Async ,Modules/2.0 。

Modules/1.x 流派:就是现在的 component 和es6 module。
Modules/Async 流派:就是现在的 AMD 规范及其实现RequireJS
Modules/2.0 流派: 就是现在的 CMD规范和 seaJS


下载和安装


SeaJS项目目前托管在GitHub上,主页为 https://github.com/seajs/seajs/
可以到其Git库的build目录下下载sea.js(已压缩)或sea-debug.js(未压缩)。

使用


给大家贴上我写的demo的代码链接:https://code.csdn.net/dujing_15620553271/aimeelia_seajs_demo/tree/master

demo 目录的结构

目录结构


index.html



- 这个主文件引入sea.js
- 引入index.js配置sea.js,启动脚本

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Sea.js三分钟入门</title>
</head>
<body>
<div id="test">你好,世界</div>

<!--在html中引入sea.js-->
<script src="js/sea.js" charset="utf-8"></script>

<!--Sea 配置文件+启动-->
<script src="js/index.js" charset="utf-8"></script>

</body>
</html>


index.js


  • index.js是一个主函数

    - 第一个作用是使用seajs.config来配置sea的参数 - 加载单入口模块或者多入口模块,启动脚本

//1.配置(更多配置请参考下面的文档)

seajs.config({
    base: "http://localhost:63342/demo/js",//默认根目录(自己修改)
    alias: {//别名的配置(当模块标识很长时,可以使用 alias 来简化)
        "jquery": "sea_jquery_min.js"
    }, 
    paths: {// 路径配置
        'gallery': 'https://a.alipayobjects.com/gallery'
    },
    charset: 'utf-8'
});

//2.加载入口

//加载单个入口模块 
seajs.use('app', function(app) {
    app.main();
});

//加载多个入口模块
seajs.use(['app','show'], function(app,show) {
   app.main();
   show.show();
});

app.js
  • 用define(function(require,export))的方法,来构建一个模块
  • exports作为模块对外的接口,调用init方法
  • require()这个方法可以将其他的模块引入到当前定义的模块中来
define(function (require, exports) {
    // 加载jquery模块
    var $ = require('jquery');

    // 这是个共有方法,用exports提供给别的模块使用
    var init = function () {
        _demo1();
    };

    // 这是个内部的私有方法,默认下划线开始命名
    var _demo1 = function () {
        $("#test").html("hello world");
    };

    exports.main = init;
});


show.js


  • 用define(function(require,export))的方法,来构建一个show模块,方法同上
define(function(require, exports) {
    // 这是个内部的私有方法,默认下划线开始命名
    var _demo1 = function() {
        console.log("呵呵");
    };

    // 这是个共有方法,用exports提供给别的模块使用
    var init = function() {
        _demo1();
    };

    exports.show = init;
});


样式展示


  1. 初始样式
    这里写图片描述



  2. 最终样式
    这里写图片描述

结语


Sea的核心API并不是很多,也不需要你来死记硬背,那么理解他当中的设计模式就很重要啦~ 。即使你在工作中不会用到sea也没有关系,我们可以把他的思想应用到我们的代码中,将你写的函数模块化,每一个函数只执行单一的一个逻辑。看懂了这个demo,那么你已经了解了sea.js核心,怎么样sea的入门还是很简单的吧,下面有几篇好的文档,大家可以进行进一步的学习。

http://www.zhangxinxu.com/sp/seajs/docs/zh-cn/module-definition.html

http://www.tuicool.com/articles/FfEJv2u

http://cyj.me/why-seajs/zh/#intro
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值