模块化开发,SesJS简单总结

一、概念:
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架。

在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范。该规范明确了模块的基本书写格式和基本交互规则。

在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:define(factory);

SeaJS解决了两个问题:

1.JavaScript的模块化

2.按模块加载

SeaJS在开发中的角色:在多人协作开发时,起着后勤人员的作用,协调  文件依赖、命名冲突、按需加载的作用;

二、用法:

1.引入sea.js

2.定义模块--define

3.对外提供接口--export

4.依赖接口--require

5.调用模块--seajs.use

例:

为了让 sea.js 内部能快速获取到自身路径,推荐手动加上 id 属性

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>seajs的使用方法</title>
 6 <script type="text/javascript" src="sea/sea.js" id="seajs"></script>
 7 <script>
 8 /*
 9     调用模块
10     语法:
11         seajs.use(url, callback);
12     参数说明:
13         url: 调用模块的地址, url默认根目录是sea.js所有文件夹
14         callback: 回调函数
15     内部工作原理:
16         填入url后,seajs会异步加载url的文件, 加载完成后执行 callback;
17         这样就实现了按模块加载JS,也可以说是按需加载。
18 */
19 seajs.use(‘./js/test1.js‘,function(ex){
20
21     //ex就是对外接口export
22     ex.tab();
23
24     function tab(){
25         alert(‘我是现写的,大家都是tab,但不冲突哦~~‘);
26     }
27
28     tab();  //很好的就解决了命名冲突
29
30 });
31
32 </script>
33 </head>
34
35 <body>
36 </body>
37 </html>

目录层级关系如下 :

test1.js 如下:

 1 // JavaScript Document
 2 /*
 3     定义模块
 4     语法:
 5         define(function (require, exports, module){ //参数写法是固定
 6             //your code gose here
 7          });
 8     参数说明:
 9         require: 依赖的接口
10         exports: 对外提供的接口
11         module:
12     内部工作原理:
13         1.当调用require方法时,seajs会同步加载url的文件,这样就解决依赖问题了。如果想异步加载就用require.async(url, callback);
14         2.exports对象下包含的是对外提供的属性和方法,调用seajs.use时,callback函数的参数就是exports对象
15 */
16 define(function(require, exports, module){
17
18     //如果依赖的是一个普通JS文件
19     require(‘./test2.js‘);
20
21     //如果依赖的是一个用define写的JS模块
22     var ex = require(‘./test3.js‘);
23
24     function tab(){
25         alert(‘我是test1模块的一个方法‘);
26         alert(‘test1‘ + a);
27         alert(‘test1‘ + ex.b)
28     }
29
30     exports.tab = tab;
31
32 });

test2.js 如下:

1 // JavaScript Document
2
3 var a = ‘依赖test2了, 我是test2的全局变量‘;

test3.js 如下:

1 // JavaScript Document
2
3 define(function(require,exports,module){ //参数写法是固定
4
5     exports.b = ‘依赖test3了,我是test3模块的局部变量‘;
6
7 });

上面说到了seajs中常用的4个方法,别外请参考管方的seajs常用的7个方法: https://github.com/seajs/seajs/issues/266

模块化开发,SesJS简单总结

时间: 2024-10-12 21:03:00

模块化开发,SesJS简单总结的相关文章

Sea.js 提供简单、极致的模块化开发体验

http://seajs.org/docs/#intro 为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. 自然直观的代码组织方式:依赖的自动加载.配置的简洁清晰,可以让我们更多地享受编码的乐趣. Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口. 兼容性 Sea.js 具备完善的测试用例,兼容所有主流浏览器:

seaJs模块化开发简单入门

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

关于Egret模块化开发---vip系统

关于Egret模块化开发---vip系统 目录 关于Egret模块化开发---vip系统... 1 前言... 1 一,搭建界面... 1 二,建立数据模型... 3 1)数据模型的搭建: 3 2)数据的建立... 4 3)数据的增删改查... 7 三.做交互, 7 结束... 8 前言 做游戏就是做数据,数据模型的设计,是体验mvc一种基础的设计,用数据驱动界面变化.. 做为一个程序要学会模块化,配置化,脚本化的需求,提防策划的需求变更的可能 例如:做一个VIP系统步骤: 搭建界面 建立数据模

javascript模块化开发编程

随着网站的不断迭代更新,js代码越来越多,那么问题来了 代码比较乱 命名出现冲突 文件依赖比较繁杂 为了解决以上问题,模块化开发出现了 1.一个简单的demo,维护和扩展模块 模块的维护和扩展一定要遵守一个约定:开闭原则 对添加开放,对修改封闭 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>扩展和维护模块</

前端模块化开发的价值

本文发表在<程序员>杂志 2013 年 3 月刊,推荐购买. 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂.本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发. 恼人的命名冲突 我们从一个简单的习惯出发.我做项目时,常常会将一些通用的.底层的功能抽象出来,独立成一个个函数,比如 function each(arr) { // 实现代码 } function log(str) { // 实现代码 } 并像模像样地把这些函

Mvc 模块化开发

在Mvc中,标准的模块化开发方式是使用Areas,每一个Area都可以注册自己的路由,使用自己的控件器与视图.但是在具体使用上它有如下两个限制 1.必须把视图文件放到主项目的Areas文件夹下才能生效,否则运行时会发生找不到视图的错误. 2.在实际开发中,这种开发方式只能建立一个项目,所有的开发工作都在这个项目里完成,非常不利于团队大规模开发. 显然,上面的两点限制严重制约了插件化开发实际运用.为了实现真正的插件化开发,大家积极的思考研究,又找到了如下几种方式 1.MVC Portable Ar

【JAVA】使用Java SPI ServiceLoader进行Java应用插件模块化开发

背景:在进行业务定制时需要考虑不同接口的服务实现,每个局点所要求的接口大体都不一致,要求接口服务能够插件化方式提供: 方案分析: 1)采用OSGI框架进行开发,但是考虑到OSGI的框架太重,需要引入的东西比较多,放弃了该方案: 2)采用Java class loader动态加载外部jar机制,动态加载定制的接口服务类,这种方式实现比较复杂,需要完成指定接口服务类的文件加载,同时需要能查找到所有接口服务类,作为备选方案: 3)使用java service provider interface(SP

前端模块化开发学习之gulp&amp;browserify篇

 随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发的时候,你会觉得十分费劲,因为你不知道文件之间复杂的关系,所以我们需要利用一些插件来配合进行模块化的开发. 所谓模块化的开发,写过nodejs的人都知道,文件之间的依赖可以用require()实现,但是浏览器端是不支持这样的依赖形式的,而browserify却可以解决这个问题,再加上gulp这个强大

前端模块化开发篇之grunt&amp;webpack篇

几个月前写了一篇有关gulp和browserify来做前端构建的博客,因为browserify用来做js的打包时可能有些麻烦(特别是在写React的时候),所以这里再强烈推荐一款js打包工具-webpack.webpack很强大,不光可以模块化加载js,甚至还有jsx,css,图片等等.可以看看webpack托管到github的官网,相信你看一眼就能懂webpack的强大之处了.进入webpack官网>> = =说到此处,不免有些尴尬,由于博主的英文so 一般,对webpack的认识还不够深,