声明:本文为原创文章,如需转载,请注明来源并保留原文链接前端小尚,谢谢!

背景


一个网站必然会涉及很多功能,tab选项卡、slide轮播图、pop弹出层、美化alert、paging分页等等等等,如果是企业网站那整合成一个js文件就够了,即插件库
但是对于一个大的网站平台来说需要的功能可能会有很多,而且随着平台的发展,功能会越来越多。到最后会发展成怎样的情况呢?

这是钱庄网原先的插件库,已经接近20个插件了。想象一下,你在做一个简单的活动单页里面用到了tab选项卡,于是你把插件库引用了进来,这个时候你有想过你只是需要一个功能但是却把整个插件库引进来了,多大的浪费啊。该怎么解决这种问题呢?
我们希望一个页面按需引入,这个页面需要什么功能就引入什么功能。现在主流的工具有两种,amd规范的RequireJS、cmd规范的Seajs。

什么是Seajs


  1. Seajs是一个加载器 http://kb.cnblogs.com/page/211942/
  2. 遵循 CMD 规范模块化开发,依赖的自动加载、配置的简洁清晰。
  3. 兼容性
    • Chrome 3+
    • Firefox 2+
    • Safari 3.2+
    • Opera 10+
    • IE 5.5+

基本应用


导入Seajs库

  1. 去官网下载最新的seajs文件,http://seajs.org/docs/#downloads
  2. 在页尾引入seajs:
    <script src="/site/script/sea.js"></script>
  3. 然后在它下面写模块的配置和入口。

    // seajs 的简单配置
    seajs.config({base: "../sea-modules/",alias: {"jquery": "jquery/jquery/1.10.1/jquery.js"}
    });// 加载入口模块
    seajs.use("../static/hello/src/main");

配置和入口

这里解释下配置和入口的意思。

配置

通常在配置上修改seajs的路径和别名。

seajs的路径是相对于前面引入的seajs文件的。假如是这样的目录结构:

examples/|-- index.html|`--about|     |-- news.html|`-- script|-- seajs.js|-- jquery.js`-- main.js

我们平时如果我们在index.html上引用main.js路径应该是这样写的script/main.js,从news.html引用main.js就要这样写,../script/main.js
而在seajs是相对于seajs文件的,一律直接使用main.js就OK了,是不是很方便呢?

既然这么方便那在什么情况需要配置呢?一般情况是用不到的。但是假如你的路径特别深 或者要做路径映射的时候它的作用就来了。下面介绍下常用的几个配置。

seajs.config({// Sea.js 的基础路径(修改这个就不是路径就不是相对于seajs文件了)base: 'http://example.com/path/to/base/',// 别名配置(用变量表示文件,解决路径层级过深和实现路径映射)alias: {'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe','json': 'gallery/json/1.0.2/json','jquery': 'jquery/jquery/1.10.1/jquery'},// 路径配置(用变量表示路径,解决路径层级过深的问题)paths: {'gallery': 'https://a.alipayobjects.com/gallery'}
});

查看更多

入口

入口即加载,需要加载什么文件(模块加载器)就在这里引入。sea.js 在下载完成后,会自动加载入口模块。

seajs.use("abc/main");  //导入seajs.js同级的abc文件夹下的main.js模块的(后缀名可略去不写)

seajs.use()还有另外一种用法。
有时候我们写一个简单的单页并不想为它单独写一个js文件,选择在直接把js代码写在页面上,seajs通过seajs.use()实现了这个。接收两个参数第一个是文件依赖(单个用字符串数组都可以,多个需用数组表示),第二个是回调函数。

加载单个依赖

//加载模块 main,并在加载完成时,执行指定回调
seajs.use('./main', function(main) {main.init();
});

加载多个依赖

//并发加载模块 a 和模块 b,并在都加载完成时,执行指定回调
seajs.use(['./a', './b'], function(a, b) {a.init();b.init();
});

这里回掉函数中的a和b参数是与前面的模块暴露出来的接口一一对应的。有时候也许只需要使用b的接口,但是也要把a参数写上。什么是暴露接口下面会解释。

通过seajs.use()只能在第一个参数中引入模块,不能在回调函数中使用require()载入模块。 ——141023补充

模块开发

这里才是重点,其实也很简单就是一个书写规范(CMD)而已。

// 所有模块都通过 define 来定义
define(function(require, exports, module) {// 通过 require 引入依赖var $ = require('jquery');var Spinning = require('./spinning');// 通过 exports 对外提供接口exports.doSomething = ...// 或者通过 module.exports 提供整个接口module.exports = ...});

模块是通过define()方法包装的,然后内部痛过require()方法引入需要的依赖文件(模块)。(也可以引入.css文件哦~)
模块最好是面向对象开发的,这样最后可以方便的通过exports.doSomethingmodule.exports把模块的接口给暴露出来。如果你是写的是jq插件的话就不需要这个功能了,因为你的接口是写在jquery的对象里的。如果你不需要提供接口的话也可以不使用这两个属性哦!

事实上define方法还有另外几个参数,一般情况我们用不到。具体看官方API。

小结


其实Seajs的基本使用就这么简单,日常使用足够了,之前看官网的5分钟教程楞是没看懂,等会的时候回头想想真的是5分钟学会啊,悟性太低- -||

注意事项


  1. 模块内的函数依赖必须交代清楚,防止模块在函数依赖加载前先加载出来。而且还增强了模块的独立性。
  2. 引入seajs的时候最好给<script>标签加个id,可以快速访问到这个标签(我是在模块合并时用到它的)
  3. 还有前面提到的使用seajs.use()在.html页面上写js时如果有多个模块依赖,需要使用暴露出来的接口就要让参数与它一一对应。

转载于:https://www.cnblogs.com/xjchenhao/p/4021775.html

快速上手seajs——简单易用Seajs相关推荐

  1. MUI快速入门!简单易上手教程!!

    MUI快速入门 喜欢简单直接粗暴的博客文看这就对了,超级简单的教程,保证一看就明白! 什么是MUI MUI就是以iOS平台UI为基础,补充部分Android平台特有的UI控件.(写的是移动端)说白了就 ...

  2. 如何快速剪辑音频,简单易上手

    QVE音频剪辑,操作步骤: 第一步,添加需要剪辑的音频文件 第二步 ,拖动按钮可快速选择剪辑区域,阴影部分是剪辑的,导出保留的是白色区域. 第三步.点导出,进度显示百分百后,在点打开目录,导出的文件就 ...

  3. LTspice快速上手--搭建简单RC电路

    1.安装并打开LTspice LTspice下载地址 打开LTspice: 2.搭建简单RC电路 2.1 新建原理图 单击File - New Schematic或者直接点击菜单栏中New Schem ...

  4. 绝对0基础,手撸一个公交时时到站查询的,快速上手,简单实用。不用数据库,无需后端基础。

    0基础,自己动手撸的一个时时公交到站查询的小程序. 写在最前面 结构布局 页面布局 首页的js代码,html和css我就不贴了 写在最前面 首先,自己不是一个专门搞程序开发的,之前没有html基础,没 ...

  5. python--使用cnmaps绘制省界地图(快速上手,简单有效)

    cnmaps是一个致力于让中国地图的获取和使用更丝滑的python扩展包. 当前版本具有以下几个主要功能: 自带合规地图边界,数据源来自于高德等测绘机构,让你无需再额外寻找地图边界文件. 支持地图边界 ...

  6. 快速上手!7款简单易用的在线绘图工具推荐

    随着科技的迅猛发展,越来越多的工作需要依赖电脑完成,而画图软件已经成为工作中不可或缺的一部分. 从过去简陋的Microsoft Paint到如今功能强大的Adobe Illustrator和即时设计等 ...

  7. 原创轻量VIO算法、简单易上手——XRSLAM帮你快速搭建移动平台AR应用

    来源丨浙大CADCG实验室计算机视觉组 编辑丨数理之家 点击进入->3D视觉工坊学习交流群 SLAM(Simultaneous Localization and Mapping)的中文翻译是同步 ...

  8. 简单绘图软件实现mfc大作业_生产流程图怎么做?简单易上手的流程图工具

    生产流程图是什么呢?首先,生产流程指的是在生产的过程中,劳动者通过利用一定的生产设备或工具,将各种原材料.半成品投入,按照一定顺序进行加工,最终得到成品产出的整个过程.而生产流程图则是使用图表符号的形 ...

  9. 简单的使用Seajs

    什么是Seajs Seajs是一个加载器 http://yslove.net/seajs/ 遵循 CMD 规范模块化开发,依赖的自动加载.配置的简洁清晰. 兼容性 Chrome 3+ Firefox ...

最新文章

  1. Linux下nginx支持.htaccess文件实现伪静态的方法!
  2. 某团技术拷问:ArrayList 和 LinkedList 哪个更占空间?
  3. a标签的四种链接状态
  4. linux 跟踪链接 超时,Linux:跟踪netstat -s“连接尝试失败”的来源
  5. 20200301 Intel Realsense D435摄像头掉线问题测试数据记录
  6. JS判断字符串是否为整数--简单的正则判断
  7. 协调多个对象之间的交互——中介者模式
  8. Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩
  9. 全开源智睿企业网站管理系统 v11.1.0源码
  10. 2022年IT热门能力
  11. hive0.12安装
  12. mysql判断时间是否在某个区间_如何正确理解 RT 并监控 MySQL 的响应时间
  13. CSS Margin 边距详解、CSS 实现水平垂直居中、overflow 兼容 Safari 浏览器
  14. 非常不错的window磁盘清理工具C盘清理
  15. STC15W201S串口蓝牙通信PWM控制RGB彩灯
  16. C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码
  17. 宽带速率单位《Mbps-MBps/换算》
  18. CSS篇十六——盒子模型之边框
  19. 计算机 中职生学情分析,信息技术学情分析
  20. 用爬虫抓取新浪微博粉丝

热门文章

  1. Android开机启动流程初探
  2. [转]数据库开发21条军规
  3. Application failure. hr=0x80040101:Failed to initialize virtual machine.
  4. 使用cpanel后台的“时钟守护作业”功能完成空间的定时全备份
  5. [转]ESP8266使用详解
  6. MySQL性能优化的21条最佳经验【转】
  7. ceph的数据存储之路(10) -----ceph对象存储的ls命令实现及思考
  8. 【剑指offer】设置在最小数目的阵列
  9. Exchange2010之资源邮箱
  10. 牛腩新闻发布系统(2)使用存储过程查询表