使用seajs模块化

目前对于前端模块化,主要有两个规范,一个是遵循AMD的requirejs,另一个是遵循cmd的seajs,两者都依赖支持v8引擎的nodejs,前端代码的模块化主要有以下几点好处:1是减少了js冲突,性能得到提高,js依赖关系变得更大;依赖之间的js直接加载,配置简单清晰。以下通过几个简单的小例子,直奔主题。

主页面:index.html

 <body>
	<script src="js/sea.js"></script>
	<script>
		seajs.use(‘./js/demo1.js‘,function(req){
			var rest = req.say();//req相当于demo1.js中的exports,事实上等价于demo1.js中module.exoprts              console.log(rest);
		})
	</script>
 </body>

 在demo1.js中

define(function(request,exports,module){

    function say(){
            var cnt = "不写勤奋写代码,就一直是菜鸟";
            return cnt;
   };
    exports.say = say;//exports   暴露内部的属性及方法给外面函数数使用

  console.dir(requset);   console.dir(exports);   console.dir(module);
});

结果是:

  

 对于demo1.js中的模块中,以下主要来介绍一下,define(‘自定义的id‘,[‘依赖的js库‘],callback)中的几个参数

在模块代码中

define(function(require,exports,module){  //require,主要是引入依赖模块,require(url),内部方法有,async(),cache(),resolve()  //exoprts,主要是暴露内部属性和方法,例如这里的内部方法是exports.say()  //module,主要是显示内部属性和api方法, })

对于module内部属性及方法,用以下方式去检验

define(function(require,exports,module){

    function say(){
            var cnt = "不写勤奋写代码,就一直是菜鸟";
            return cnt;
   };
    exports.say = say;//exports   暴露内部的属性及方法给外面函数数使用
    console.dir(require);
    console.dir(exports);
    console.dir(module);
    console.log(module.id+"======"+module.uri);
    console.log(module.require == require);
    console.log(module.exoprts == exports)//在
});

结果是:

了解了define()中的相关属性后,在项目中主要会遇上哪些问题,比如:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus?">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>seajs模块加载</title>
  <!--
    2017/3/5
  -->
 </head>
 <body>
    <script type="text/javascript" src="js/common/sea.js"></script>
    <script type="text/javascript">
        seajs.use(‘./js/demo1.js‘,function(req){
            var tt = req.say();
            console.log(tt);
        });
        seajs.use("./js/main.js");//入口文件,相对于sea.js路径
    </script>
 </body>
</html>

在main.js中的代码

define(function(require,exoprts,module){
	require(‘../js/a.js‘);//=>等价于a.js的内容直接写在这里     stu.say();//向着阳光生长     var text = require("../js/b.js");    console.log(text);//前端开发
});

在a.js中的代码

var stu = {};
stu.name = "向着阳光生长";
stu.say = function(){
	console.log(this.name);
}

当main.js引入的a.js时,此时结果为:向着阳光生长,当a.js不是作为一个模块时,则此时require(url),只是将一个js文件引入main.js中,当被引入的js是作为一个模块时,则此时,require(url),相当于被引入得exports,如下,在main.js中添加b.js,b.js作为一个模块被引入main.js中,则此时main.js中的require()==>exports

define(function(require,exports,module){
    var a = "前端开发";
    exports.a = a;
})

关于seajs中的一些配置重用,main.js中,seajs.config({alias:{"name","path"}});

 1 seajs.config({
 2      alias:{
 3             "demo1":"./js/demo1.js",//设置的别名
 4                 "b":"./js/b.js"
 5          }
 7   });
 8  seajs.use(["demo1","b"],function(demo1,b){
 9       var tt = demo1.say();
10        console.log(tt);
11        console.log(b.a)
12    })

执行多个模块:seajs.use([‘a‘,‘b‘],function(a,b){});

关于seajs中的异步

main.js中

define(function(require,exoprts,module){
    var tt = module.require(‘../js/b.js‘).a;//等价于require(‘../js/b.js‘).a
    console.log(tt);
  //异步加载b.js代码
    require.async(‘../js/b.js‘,function(b){
        b.price.text("jquery权威指南");
    })
});

在b.js中的代码

define(‘is‘,[‘jquery-1.11.2.min‘],function(require,exports,module){
    var a = "前端开发";
    var price = {
        text:function(name){
            this.name = name;
            console.log(this.name);//jquery权威指南
        }
    }
    exports.a = a;
    exports.price = price;
})

在首页index.html中代码

 1 seajs.config({
 2      alias:{//配置别名
 3                 "demo1":"./js/demo1.js",
 4                 "b":"./js/b.js",
 5                 ‘main‘:"./js/main.js"
 6         }
 7
 8  });//加载多个模块
 9 seajs.use(["demo1","b"],function(demo1,b){
10      var tt = demo1.say();
11      console.log(tt);
12      seajs.use("main");
13  });

运行的结果是:

根据以上的一些小demo,再次总结一下使用seajs中几个小步骤

1:在首页中,引入sea.js

2:首页使用seajs.use(url,callback)

3:在引用的模块代码中定义个个模块define("id",[‘依赖js库‘],callback)

在callback中有三个参数,require,exports,module;注意每个参数的意义以及使用功能

4:多个模块如何同时使用seajs.use([‘a.js‘,‘b.js‘],function(a,b){});

5:如何seajs.config({align:{"a","a.js"}});利用别名简化使用配置

6:异步加载,require.anysc([‘a.js‘],function(a){....});

关于更多seajs请前往官网查询http://seajs.org/docs/#docs

好了,好记性不如烂笔头,虽然seajs使用比较简单,demo也比较简单,关于怎样灵活运用到适合的项目中还是需要慢慢探索,这些就当增加自己的印象和使用记忆,希望每天学习都有所感悟,记录下来,前端菜鸟努力中....

时间: 2024-10-20 17:15:13

使用seajs模块化的相关文章

初学seaJs模块化开发,利用grunt打包,减少http请求

原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —dist   //压缩后的目标文件夹 —lib   //各个模块 —drag    //拖拽模块 —scale   //缩放模块 —seajs    //seajs库 —seajs_drag    //入口的主文件main.js —main.js /*——————————————————————————

seaJs模块化开发简单入门

随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发的seaJs,它有很多优点: 遵从CMD规范,代码模块化 中文文档通俗易懂,入门上手简单 兼容性好.配置简洁明了.提供插件接口 seajs模块化基本流程: 引入sea.js库 define定义模块 exports暴露模块 require导入模块 安装 npm安装 npm i seajs bower安

轻轻谈一下seaJs——模块化开发的利器

"仅做一件事,做好一件事." 这个应该就是seaJs的精髓了. 我在自己的一些项目中使用过seaJs,对其算是了解一二,现在就班门弄斧,轻轻地谈一下. 首先上一段度娘的话: "seaJs是一个遵循CommonJs规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载.SeaJS的主要目的是令JavaScript开

SeaJS 模块化加载框架使用

SeaJS 是一个遵循 CMD 规范的模块化加载框架 CommonJS,CMD,AMD等规范后文会提到,这里主要先了解如何在代码中使用. 如果你有使用过nodejs ,那么理解起来就容易多了. 我们通过sea.js来加载我们定义的模块(这会儿遵循CMD规范)并使用相应的数据. 首先,当然是要下载sea.js,可以直接去http://seajs.org/docs/#downloads 直接下载代码包,解压后 在 /dist/目录下可以 找到 sea.js CMD规范是懒加载,按需加载,也就是在re

seajs模块化jQuery与jQuery插件【转】

把jQuery修改成SeaJs的模块代码非常简单,就是用下面这段语句将jQuery源代码包裹起来: define('jquery',[],function(require, exports, module){ //这里放jQuery源代码 module.exports = jQuery; }); 也可以加一个判断,如果define已经被定义,就把jQuery模块化,如果define没有被定义,正常执行jQuery代码: /* * http://julabs.com */ (function(fa

RequireJS与SeaJS模块化加载示例

web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理,于是出现CommonJS项目,提出了一些规范模块化的写法,在Nodejs中普遍应用,同样浏览器端也出现了类似的解决方案,并结合浏览器异步加载的特性,有RequireJS提出的AMD(Asynchronous Module Definition)规范,以及SeaJS提出的CMD(Common Modu

2.精通前端系列技术之seajs模块化使工作更简单(二)

drag.js // JavaScript Document //B开发 define(function(require,exports,module){ function drag(obj){ var disX = 0; var disY = 0; obj.onmousedown = function(ev){ var ev = ev || window.event; disX = ev.clientX - obj.offsetLeft; disY = ev.clientY - obj.off

前端模块化——seaJS

1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次即可 方法接受两个参数 第一个参数表示引入模块的路径 可以是一个字符串,此时引入一个文件 也可以是一个数组,每个成员表示一个文件地址 第二个参数是一个回调函数 作用是全局作用域 回调中的参数个数与前面加载的模块一一对应 三:Seajs中根目录就是seajs所在的目录: 在使用seajs时候,要将se

jQuery结合CSS实现手风琴组件(2)----利用seajs实现静态资源模块化引入

1. 目录结构(webStrom) 2. 代码 1.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS DIV 1</title> <script type="text/javascript" src="js/jquery-3.0.0.js"&g