简单的使用Seajs
什么是Seajs
- Seajs是一个加载器 http://yslove.net/seajs/
- 遵循 CMD 规范模块化开发,依赖的自动加载、配置的简洁清晰。
兼容性
- Chrome 3+
- Firefox 2+
- Safari 3.2+
- Opera 10+
- IE 5.5+
基本应用
导入Seajs库
- 去官网下载最新的seajs文件, http://seajs.org/docs/#downloads
- 在页尾引入seajs:
<script src="/site/script/sea.js"></script>
然后在它下面写模块的配置和入口。
// 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参数写上。什么是暴露接口下面会解释。
模块开发
这里才是重点,其实也很简单就是一个书写规范(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.doSomething
或 module.exports
把模块的接口给暴露出来。如果你是写的是jq插件的话就不需要这个功能了,因为你的接口是写在jquery的对象里的。如果你不需要提供接口的话也可以不使用这两个属性哦!
事实上define方法还有另外几个参数,一般情况我们用不到。具体看 官方API 。
小结
其实Seajs的基本使用就这么简单,日常使用足够了,之前看官网的 5分钟教程 楞是没看懂,后来想想真的是5分钟学会啊,悟性太低- -||
注意事项
- 模块内的函数依赖必须交代清楚,防止模块在函数依赖加载前先加载出来。而且还增强了模块的独立性。
- 引入seajs的时候最好给
<script>
标签加个id,可以快速访问到这个标签(我是在模块合并时用到它的) - 还有前面提到的使用
seajs.use()
在.html页面上写js时如果有多个模块依赖,需要使用暴露出来的接口就要让参数与它一一对应。
---恢复内容结束---
我们希望一个页面按需引入,这个页面需要什么功能就引入什么功能。现在主流的工具有两种,amd规范的RequireJS、cmd规范的Seajs。
什么是Seajs
- Seajs是一个加载器 http://yslove.net/seajs/
- 遵循 CMD 规范模块化开发,依赖的自动加载、配置的简洁清晰。
兼容性
- Chrome 3+
- Firefox 2+
- Safari 3.2+
- Opera 10+
- IE 5.5+
基本应用
导入Seajs库
- 去官网下载最新的seajs文件, http://seajs.org/docs/#downloads
- 在页尾引入seajs:
<script src="/site/script/sea.js"></script>
然后在它下面写模块的配置和入口。
// 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参数写上。什么是暴露接口下面会解释。
模块开发
这里才是重点,其实也很简单就是一个书写规范(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.doSomething
或 module.exports
把模块的接口给暴露出来。如果你是写的是jq插件的话就不需要这个功能了,因为你的接口是写在jquery的对象里的。如果你不需要提供接口的话也可以不使用这两个属性哦!
事实上define方法还有另外几个参数,一般情况我们用不到。具体看 官方API 。
小结
其实Seajs的基本使用就这么简单,日常使用足够了,之前看官网的 5分钟教程 楞是没看懂,后来想想真的是5分钟学会啊,悟性太低- -||
注意事项
- 模块内的函数依赖必须交代清楚,防止模块在函数依赖加载前先加载出来。而且还增强了模块的独立性。
- 引入seajs的时候最好给
<script>
标签加个id,可以快速访问到这个标签(我是在模块合并时用到它的) - 还有前面提到的使用
seajs.use()
在.html页面上写js时如果有多个模块依赖,需要使用暴露出来的接口就要让参数与它一一对应。
简单的使用Seajs的更多相关文章
- 快速上手seajs——简单易用Seajs
快速上手seajs——简单易用Seajs 原文 http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...
- 用spm2构建seajs项目的过程
前言 Javascript模块化规范有CommonJs规范,和主要适用于浏览器环境的AMD规范,以及国内的CMD规范,它是SeaJs遵循的模块化规范.因为以前项目中用SeaJs做过前端的模块管理工具, ...
- 转:Why SeaJS
原文地址:http://chaoskeh.com/blog/why-seajs.html Why SeaJS 前言 本文主要面向刚接触 SeaJS 的同学.文章会先提出传统 Javascript 开发 ...
- 我的前端之旅--SeaJs基础和spm编译工具运用[图文]
标签:seajs nodejs npm spm js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...
- seajs的那些坑
seajs是what? 先看段代码: var loder = {}; var define = loder.define = function(id,deps,factory){ loader[id] ...
- seaj和requirejs模块化的简单案例
如今,webpack.gulp等构件工具流行,有人说seajs.requirejs等纯前端的模块化工具已经被淘汰了,我不这么认为,毕竟纯前端领域想要实现模块化就官方来讲,还是有一段路要走的.也因此纯前 ...
- Seajs的用法
以前经常听到Seajs,但是没深入了解过,不清楚到底是用做哪个方面,后来调组到M站做开发,发现项目用到了Seajs,便去了解下 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实 ...
- seajs入门使用
使用 Sea.js 进行模块化开发还能够带来非常多优点: 模块的版本号管理. 通过别名等配置,配合构建工具,能够比較轻松地实现模块的版本号管理. 提高可维护性.模块化能够让每一个文件的职责单一,很有利 ...
- CommonJS,AMD,CMD区别
学得比较晕,再次看commonjs,amd, cmd时好像还是没完全弄清楚,今天再整理一下: commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如re ...
随机推荐
- JDFS:一款分布式文件管理实用程序第二篇(更新升级、解决一些bug)
一 前言 本文是<JDFS:一款分布式文件管理实用程序>系列博客的第二篇,在上一篇博客中,笔者向读者展示了JDFS的核心功能部分,包括:服务端与客户端部分的上传.下载功能的实现,epoll ...
- TextView 实现跑马灯效果
在String.xml中添加: <string name="txt">跑马灯效果,我跑啊跑</string>在layout/mian.xml中添加TextV ...
- 通过JSP+servlet实现文件上传功能
在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制. 但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的. 通过为表单元素设置Method=&qu ...
- 判断客户端使用的是安卓还是苹果,然后加载对应的css文件
<script type="text/javascript" charset="utf-8"> var browser = { versions: ...
- xtrabackup备份原理
Percona XtraBackup工作原理 Percona XtraBackup是基于InnoDB的崩溃恢复功能.复制InnoDB数据文件,导致内部不一致的数据; 但随后它对文件执行崩溃恢复,使它们 ...
- RMAN备份与恢复(二)--常用操作学习
(1)连接目标数据库 在RMAN中可以建立与目标数据库或恢复目录数据库的连接.与目标数据库连接时,用户须具有sysdba系统权限,以保证可以进行数据库的备份.修复与恢复工作. 可以在操作系统命令提示符 ...
- 表连接查询的顺序和where子句条件的前后顺序会影响sql的性能么
有好多时候,我们常听别人说大表在前,小表在后,包括现在好多百度出来的靠前的答案都有说数据库是从右到左加载的,所以from语句最后关联的那张表会先被处理.如果三表交叉,就选择交叉表来作为基础表.等等一些 ...
- 大数据平台搭建-zookeeper集群的搭建
本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...
- 动态分配数组(new)和用随机数赋值(rand)
#include <iostream>#include <ctime>#include <cstdlib>using namespace std; int main ...
- python网络爬虫之scrapy 工程创建以及原理介绍
执行scrapy startproject XXXX的命令,就会在对应的目录下生成工程 在pycharm中打开此工程目录:并在Run中选择Edit Configuration 点击+创建一个Pytho ...