一、模块定义

模块定义文档: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 方法在执行时,默认会传入三个参数:requireexportsmodule。这三个参数可根据情况省略,甚至全部省略也可以。

模块定义方式有很多种,根据需求选择:

这里只介绍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)的使用详解相关推荐

  1. Dockerfile中CMD和ENTRYPOINT命令详解

    原文:https://m.jb51.net/article/136264.htm Dockerfile中CMD和ENTRYPOINT命令详解 发布时间:2018-03-12 11:46:00 作者:s ...

  2. windows批处理(cmd/bat脚本)编程详解

    cmd文件和bat文件的区别:二者本质上没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多.cmd文件只有 ...

  3. python调用cmd执行命令_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  4. cmd.exe启动参数详解

    启动命令解释程序 Cmd.exe 的新范例.如果在不含参数的情况下使用,cmd 将显示操作系统的版本和版权信息. 语法 cmd [{/c | /k}] [/s] [/q] [/d] [{/a | /u ...

  5. cmd CD命令用法详解

    1.开始->运行->CMD 2.进入某个磁盘,直接盘符代号:如D:,不用CD 命令切换 3.进入除根录以下的文件夹 cd 文件夹路径 例如我要进入 E:/Program Files/PHP ...

  6. 【cmd】Start命令详解

    ###Date: 2017/9/14 Start 启动单独的"命令提示符"窗口来运行指定程序或命令.如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口. 语法  s ...

  7. c执行cmd pdf2swf_SWFTOOLS PDF2SWF 参数详解

    转载至:http://blog.csdn.net/iamduoluo/article/details/6820329 SWFTools提供了一系列将各种文件转成swf的工具: font2swf.exe ...

  8. (转载)cmd-命令大全及详解

    原文地址:http://greatverve.cnblogs.com/archive/2011/12/09/windows-cmd.html 命令简介 cmd是command的缩写.即命令行 . 虽然 ...

  9. android route命令详解,route cmd命令详解

    在本地 IP 路由表中显示和修改条目.使用不带参数的 route 可以显示帮助.接下来是小编为大家收集的route cmd命令详解,希望能帮到大家. route cmd命令详解 语法 route [- ...

  10. MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)

    本博客主要总结MFC中匿名管道的原理和具体调用实例,以及调用匿名管道三个核心函数各个参数用法详解,具体的如下所述. 博主在做项目时,遇到一个问题.用程序调用一个进程,然后读取进程输出信息.但是,博主用 ...

最新文章

  1. Docker环境配置指南!
  2. 最全芯片产业报告出炉,计算、存储、模拟IC一文扫尽
  3. Android开发之使用SharedPreferences实现QQ登陆的选项框记忆功能(源代码分享)
  4. JavaWeb的一些理解
  5. mysql 导入导出 优化_mysql数据导入导出与数据表优化
  6. 攻防世界Reverse第二题insanity
  7. Eclipse Outline图标
  8. HDU - 2825 Wireless Password(AC自动机+状压dp)
  9. node.js 中间件_Node.js中的Passport中间件(模块)
  10. layui时间日期控件使用
  11. 2021-秋招你准备好了吗?软件测试面试题
  12. [存档]xx-09210xxx-2010-ACM-ICPC竞赛总结
  13. apache基本配置
  14. mapreduce求平均值
  15. 不怕汗水与晃动的运动耳机推荐,六款专业的运动耳机
  16. 惠普win7笔记本耳机没声音
  17. 【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)
  18. 最新iOS高薪面试必备要点总结
  19. oracle序列无缓存,oracle 序列跳号现象
  20. KITTI 自动驾驶 数据集 镜像 百度网盘 百度云 下载

热门文章

  1. 【云栖大会】阿里云如何“计算”地震?
  2. handoff报告各句话的含义
  3. 微信小程序-运用painter插件生成海报分享朋友圈--比canvas好用
  4. PyTorch-3 训练一个分类器
  5. win7系统system volume information如何删除--wom7w.com
  6. 镜像法计算变压器漏磁场(一)
  7. Linux一句话精彩问答--2004/03/16更新(zt)
  8. POSIX 文件能力:分配根用户的能力
  9. CAD新手必练图形三
  10. 求职谈薪水,破除锚定效应拿下高薪