seajs教程之seajs学习笔记

0x0 介绍

在前几年,前端界最火的莫过于jQuery,那是个插件纷飞的年代。而现在,CommonJS草案的提出,Node.js让JavaScript在服务端大展拳脚,前端界已经不是那个手持jQuery的小孩了。

在这个新的浪潮中,JavaScript模块化开发开始流行起来。CommonJS标准制定后,Node.js兴起,RequireJS使得JavaScript模块化在客户端齐头并进,ES6模块标准呼之欲出,涌现出了很多模块化的方案,兼容ES6也好,不兼容也罢;国内外相关的项目如雨后春笋边涌现出来,谁都有可能引领标准。这系列文章将记录我对sea.js的学习。

0x1 为什么用sea.js?

Sea.js 追求简单、自然的代码书写和组织方式,具有以下核心特性:

简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码。 自然直观的代码组织方式:依赖的自动加载、配置的简洁清晰,可以让我们更多地享受编码的乐趣。 Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口。

0x2 开始吧

首先去sea.js官网下载最新的文件http://seajs.org/docs/ 。 或者 。 下载之后看到目录结构: dist -- sea.js 等压缩好的文件,直接可用 docs -- 使用文档 lib -- 给 Node.js 用的版本 src -- 源码 tests -- 测试集 tools -- 压缩等工具,可查看 build.xml 得到源码合并顺序 Makefile -- 可执行构建、测试等命令

 

然后呢把之前下载的seajs文件里的seajs/dist中的文件都放在scripts/seajs主要就是sea.js.jquery.js以及应用的Js

接下来我们开始代码了,想想是不是都好激动呢

第一步当然是引入sea.js啦

 代码如下 复制代码

<script src="Assets/scripts/seajs/sea.js" id="seajsnode"></script>

关于id="seajsnode"的两个解释: a. SeaJS加载自身的script标签的其他属性(如data-config、data-main)等来实现不同的功能 b. SeaJS内部通过document.getElementById("seajsnode")来获取这个script标签(其实SeaJS内部还有一种方式,不过另一种方式的效率比较低,所以不推荐,如果有兴趣,可以看一下源码 /blob/master/src/util-path.js)

第二步开始写自己应用的Js代码啦

 代码如下 复制代码
define(function(require,exports,module){
     var util = {};
     var colorRange = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
     util.randomColor = function(){
          return '#' +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)];
     };
     var helloSeaJS = document.getElementById('hello-seajs');
     helloSeaJS.style.color = util.randomColor();
     window.setInterval(function(){
          helloSeaJS.style.color = util.randomColor();
     },1500);
});

sea.js里所有的代码都放在define(function(require,exports,module){});函数体里面,define是SeaJS定义的一个全局函数,用来定义一个模块。 上面我们发现就是一个js文件,在seajs里一个文件表示一个模块,两个文件就是要分开来写变成两个模块了。接下看看我们怎么把这个一个文件模块变成两个文件模块 第一部分 独立出util.js

 代码如下 复制代码
define(function(require,exports,module){
     var util = {};
     var colorRange = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
     util.randomColor = function(){
          return '#' +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)] +
               colorRange[Math.floor(Math.random() * 16)];
     };
     module.exports = util;
});

我们发现这个模块除define之外,我们看到module.exports = util;这一句比较特殊。这句是在说,我util模块向外暴露的接口就这些,其他所有的东西都是我内部用的,你们就别想用啦。 再看看另一个模块application.js:

 代码如下 复制代码
define(function(require,exports,module){
     var util = require('./util');
     var helloSeaJS = document.getElementById('hello-seajs');
     helloSeaJS.style.color = util.randomColor();
     window.setInterval(function(){
          helloSeaJS.style.color = util.randomColor();
     },1500);
});

这个模块里,我们看到var util = require('./util');这句比较特殊。这句就是在说,我application模块由于业务需要,想请util模块来帮忙,所以把util给require进来。现在基本上把上面那个一个模块分为两个模块了,记住,一个文件就是一个模块。

最后开始引入代码 这里要用到sea.js的模块加载启动,具体看这里/issues/260 。很简单使用seajs.use即可,比如这里我们可以在

 代码如下 复制代码

<script src="assets/scripts/seajs/sea.js" id="seajsnode">

后面加上:

<script> seajs.use("application/application"); </script>

嗯,到这里我们差不多就结束了可以看到我们可爱的hello world效果了,至于那些打包压缩的事下次再来学习吧。 具体的首页代码就是下面的了,自己再加上上面的Js代码去看看效果吧,(^__^) 嘻嘻……

 代码如下 复制代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello world</title>
    <style type="text/css">
        html,body,h1{padding:0px;margin:0px;font-size:18px;}
        #hello-seajs{
            -webkit-transition:color 1.5s ease;
            -o-transition:color 1.5s ease;
            -moz-transition:color 1.5s ease;
            transition:color 1.5s ease;
            font-size:10em;
            text-align:center;
        }
    </style>
</head>
<body>
    <h1 id="hello-seajs">
        Hello world
    </h1>
    <script src="scripts/seajs/sea.js" id="seajsnode"></script>
    <script> seajs.use("application/application"); </script>
    <script src="scripts/application/util.js"></script>
    <script src="scripts/application/application.js"></script>
</body>
</html>

时间: 2024-12-29 15:56:54

seajs教程之seajs学习笔记的相关文章

HTML5入门教程之HTML5学习笔记

html5揭秘   先把form一类的代码发上来吧.觉得HTML5的input标签,几乎把之前用过的js验证全部pass了, input中的文本占位. 常用的数据验证,如email.url.min.max.required等. 数值的选择方便直接的可以用拖动滑块的方式.  代码如下 复制代码 <form> <!--HTML5添加了占位文本--> text属性可以有占位文本<input style="width:200px" name="q&quo

C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/3922668.html. 下面我们来主要讲解一下MEF中的导入和导出,还是上一篇的代码(这篇中,我还会贴出完整的代码),修改Program的代码如下: using System; using System.Collections.Generic; using System.Linq; using Sys

C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF有这样一段说明: Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项. 通过 MEF,不

C#可扩展编程之MEF学习笔记(五):MEF高级进阶

好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用的基本已经讲完了,相信大家已经能看出MEF所带来的便利了.今天就介绍一些MEF中一些较为不常用的东西,也就是大家口中的所谓的比较高级的用法. 前面讲的导出都是在每个类上面添加Export注解,实现导出的,那么有没有一种比较简便的方法呢?答案是有的,就是在接口上面写注解,这样只要实现了这个接口的类都会

Seajs的学习笔记

 这篇文章主要介绍了Seajs的相关知识和和学习心得,适合刚接触SeaJS的同学,需要的朋友可以参考下 1.简介   Seajs,一个Web模块加载框架,追求简单.自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码.依赖的自动加载.配置的简洁清晰,可以让程序员更多地专注编码.   2.优缺点   优点: 1).提高可维护性. 2).模块化编程. 3).动态加载,前端性能优化   缺点: 1).学习文档偏少且混乱,会更改团队使用JS的编写习惯,必须使用模块化编程. 2).

Seajs的学习笔记_Seajs

1.简介 Seajs,一个Web模块加载框架,追求简单.自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码.依赖的自动加载.配置的简洁清晰,可以让程序员更多地专注编码. 2.优缺点 优点:1).提高可维护性.2).模块化编程.3).动态加载,前端性能优化 缺点:1).学习文档偏少且混乱,会更改团队使用JS的编写习惯,必须使用模块化编程.2).不太适合团队目前的情况,多JS文件但少改动,动态加载优势和模块化优势不明显.3). 需要配套使用SPM工具,JS的打包和管理工具.

PHP入门教程之PHP变量与常量学习

上个月我专门介绍了PHP入门教程中关于PHP基本语法的入门学习,主要介绍了常用的几种PHP标记符,PHP语句的构成,PHP的注释等,今天的PHP入门教程我们主要学习PHP基本语法中PHP变量和常量的基础知识. 针对PHP变量入门学习,本篇入门教程分以下几部分介绍:PHP变量如何标识.PHP变量如何声明.如何给PHP变量赋值.PHP变量的类型介绍.常用PHP变量函数介绍. 针对PHP常量入门学习,主要介绍PHP常量的定义和使用方式. 一.PHP变量如何标识 所谓标识符,其实也就是PHP变量名,主要

PHP内核学习教程之php opcode内核实现_php实例

opcode是计算机指令中的一部分,用于指定要执行的操作, 指令的格式和规范由处理器的指令规范指定. 除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数. 这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等. 通常opcode还有另一种称谓:字节码(byte codes). 例如Java虚拟机(JVM),.NET的通用中间语言(CIL: Common Intermeditate Language)等等. 1. Opcode简介 opcode是计算

jQuery插件学习教程之SlidesJs轮播+Validation验证_jquery

SlidesJs(轮播支持触屏)--官网(http://slidesjs.com) 1.简介 SlidesJs是基于Jquery(1.7.1+)的响应幻灯片插件.支持键盘,触摸,css3转换. 2.代码 <!doctype html> <head> <style> /* Prevents slides from flashing */ #slides { display:none; } </style> <script src="http:/