CMD(seajs)的使用详解
一、模块定义
模块定义文档:CMD 模块定义规范 · Issue #242 · seajs/seajs · GitHub
CMD规范:https://github.com/cmdjs/specification/blob/master/draft/module.md
核心:
在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:
define(factory);
factory
可以是一个函数,也可以是一个对象或字符串。
factory
为对象、字符串时,表示模块的接口就是该对象、字符串。通过require载入它们时,就是返回对象或者字符串。
factory
为函数时,表示是模块的构造方法。执行该构造方法,可以得到模块向外提供的接口。factory
方法在执行时,默认会传入三个参数:require
、exports
和 module。这三个参数可根据情况省略,甚至全部省略也可以。
模块定义方式有很多种,根据需求选择:
这里只介绍factory为函数的情况,这是seajs推荐的做法,同时也是个万金油。
提示:永远只使用exports或者module其中一种导出。
//基本形式define(function(require, exports, module) {// 模块代码});
require在需要从模块内部引入外部模块的时候添加。
以下认识还是比较重要的:require执行的时候是同步方式,阻塞脚本执行,所以通过这种方式加载的外部模块,总是能够保证加载完成之后才会被调用,它一般用来加载需要立刻调用的模块。require.async执行是异步方式,不阻塞脚本(脚本加载完成,执行回调),在加载的时候,如果立刻调用外部模块,而外部模块还没下载完成,那么就会出错,所以它一般用来加载不需要立刻调用的模块。两种方式配合使用,可以用来提高首次载入速度。
另外,如果要设置按条件加载,那么就使用require.async。原因如下:
seajs在加载模块的时候,会扫描factory函数内部的所有require调用,并把require调用参数作为该模块的依赖模块,全部加载。如果使用require做条件加载,那么条件是无效的,因为seajs总会扫描到条件语句内部的require,并加载它。
exports在需要通过exports单个导出模块接口的时候添加。
module在需要通过module.exports整个导出一个对象的时候添加。
但是seajs推崇统一的写法,也就是说永远都保持上述书写方式。
典型举例:
//不依赖外部模块//采用exports导出//moduleA.jsdefine(function(require,exports,module){exports.helloA=function(){console.log("This is moduleA.helloA!");}exports.helloExp="moduleA + exports";
});
//依赖外部模块//采用module导出//moduleB.jsdefine(function(require,exports,module){var moduleA = require("./moduleA");moduleA.helloA();//调用moduleA中的hello()方法console.log("moduleA:",moduleA.helloExp);module.exports = {helloB:function(){console.log("This is moduleB!");}}});
总结:与模块定义与调用相关的五个API为define,require,require.async ,exports,module.exports。
二、模块的加载
seajs对于模块的加载自然依赖于seajs,所以需要在对应的html文档中引入seajs。
<script src="./static/sea.js"></script>
然后与加载相关的两个API是seajs.config和seajs.use。
其中seajs.config用来创建一些基本配置,seajs.use用来引入入口点js文件。
<script>seajs.config({base:"./",alias:{moduleA:"lib/moduleA.js"}});seajs.use("./app.js");
</script>
seajs.config配置项还是挺多的,常用的就是base,alias,path了。
更多配置项:配置 · Issue #262 · seajs/seajs · GitHub
seajs.use用来在html文档中引入任意模块,一次性引入一个或者以数组形式引入多个。
更多具体内容:https://github.com/seajs/seajs/issues/260
三、总结
seajs是一种CMD规范的实现,其常用的API有7个:define,require,require.async,exports,module.exports,seajs.config,seajs.use。
通过这7个API,我们可以定义模块,调用模块,在html中加载模块。
需要使用更多功能特性可以参考附录中的seajs文档。
附:
seajs文档:Sea.js - A Module Loader for the Web
例子地址:https://github.com/comefromezero/FrontModule
CMD(seajs)的使用详解相关推荐
- Dockerfile中CMD和ENTRYPOINT命令详解
原文:https://m.jb51.net/article/136264.htm Dockerfile中CMD和ENTRYPOINT命令详解 发布时间:2018-03-12 11:46:00 作者:s ...
- windows批处理(cmd/bat脚本)编程详解
cmd文件和bat文件的区别:二者本质上没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多.cmd文件只有 ...
- python调用cmd执行命令_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- cmd.exe启动参数详解
启动命令解释程序 Cmd.exe 的新范例.如果在不含参数的情况下使用,cmd 将显示操作系统的版本和版权信息. 语法 cmd [{/c | /k}] [/s] [/q] [/d] [{/a | /u ...
- cmd CD命令用法详解
1.开始->运行->CMD 2.进入某个磁盘,直接盘符代号:如D:,不用CD 命令切换 3.进入除根录以下的文件夹 cd 文件夹路径 例如我要进入 E:/Program Files/PHP ...
- 【cmd】Start命令详解
###Date: 2017/9/14 Start 启动单独的"命令提示符"窗口来运行指定程序或命令.如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口. 语法 s ...
- c执行cmd pdf2swf_SWFTOOLS PDF2SWF 参数详解
转载至:http://blog.csdn.net/iamduoluo/article/details/6820329 SWFTools提供了一系列将各种文件转成swf的工具: font2swf.exe ...
- (转载)cmd-命令大全及详解
原文地址:http://greatverve.cnblogs.com/archive/2011/12/09/windows-cmd.html 命令简介 cmd是command的缩写.即命令行 . 虽然 ...
- android route命令详解,route cmd命令详解
在本地 IP 路由表中显示和修改条目.使用不带参数的 route 可以显示帮助.接下来是小编为大家收集的route cmd命令详解,希望能帮到大家. route cmd命令详解 语法 route [- ...
- MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)
本博客主要总结MFC中匿名管道的原理和具体调用实例,以及调用匿名管道三个核心函数各个参数用法详解,具体的如下所述. 博主在做项目时,遇到一个问题.用程序调用一个进程,然后读取进程输出信息.但是,博主用 ...
最新文章
- Docker环境配置指南!
- 最全芯片产业报告出炉,计算、存储、模拟IC一文扫尽
- Android开发之使用SharedPreferences实现QQ登陆的选项框记忆功能(源代码分享)
- JavaWeb的一些理解
- mysql 导入导出 优化_mysql数据导入导出与数据表优化
- 攻防世界Reverse第二题insanity
- Eclipse Outline图标
- HDU - 2825 Wireless Password(AC自动机+状压dp)
- node.js 中间件_Node.js中的Passport中间件(模块)
- layui时间日期控件使用
- 2021-秋招你准备好了吗?软件测试面试题
- [存档]xx-09210xxx-2010-ACM-ICPC竞赛总结
- apache基本配置
- mapreduce求平均值
- 不怕汗水与晃动的运动耳机推荐,六款专业的运动耳机
- 惠普win7笔记本耳机没声音
- 【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)
- 最新iOS高薪面试必备要点总结
- oracle序列无缓存,oracle 序列跳号现象
- KITTI 自动驾驶 数据集 镜像 百度网盘 百度云 下载