SeaJS是一个基于CMD模块定义规范实现一个模块系统加载器
如何选择一个技术产品栈:
- 看作者是否是大牛
- 看社区是否活跃
- 看是否经常更新
SeaJS的作者已经不更新该项目了,但是国内很多公司还是在使用SeaJS作为前端模块化解决方案,
学习SeaJS有助于我们学习 Node.js 中的模块系统,因为他们所使用的规范基本一致。
###seaJs使用步骤:
1. 下载 sea.js 库
2. 在页面中引入 sea.js
3. define - 定义模块
4. module.exports - 暴露接口
5. require - 加载模块
6. seajs.use - 从入口模块启动模块系统
seaJs.use('./././',function(a){
console.log(a);//其中a就是exports而不是module.exports
}
10、define()的用法:
define(object)
define(string)
define(function(require,exports,medule){
//所有的自己的js 代码都写在回调函数中
})
例子1:
define(function (require ,exports , module ){ //最好在每一次定义模块的时候,尽量都使用匿名函数,并传入三个参数的方式;不要重命名require函数;
module.exports = { //通过这种形式将对象暴漏到模块之外,供其他文件使用,可以直接使用exports = ...
add : require ( ' ./././ ' ) , //require的参数值必须是字符串,该字符串就是表示模块的一个模块标识
mod : require ( ' ./././ ' ) // 访问的时候使用 mod() 直接调用
}
})
例子2:
define ( function ( require , exports , module ) {
exports.add = reuire ( ' ./././' ) ; // 访问的时候需要通过 exports.add()方式进行调用
exports.mod =require ( './././' );
})
11、require('./././')加载文件模块
最好吧所有的require都写在define 函数中js 代码的最上面
12、seaJs在页面中的使用:
首先加载sea.js 文件
然后再启动模块:<script> </script>标签中加载入口模块 seajs.use('./a')
启动模块系统----开机
seaJs.use方法是异步加载模块文件
13、模块标识:其实就是模块的路径,可以不包含文件的后缀名,因为加载的都是js文件
相对标识:以 ./ 或者 ../ 开始的都是相对标识,相对于当前出现的位置所属的文件
顶级标识:不以 ./ 或者 ../ 或者 / 开始的标识是顶级标识,顶级标识相对模块系统的基础路径来解析,模块系统的基础路径在不指定的情况下,
默认顶级目录是第三方插件 sea.js 所在的目录,可以通过 seajs.config() 方法来指定顶级标识的基础路径
顶级标识配置:seajs.config({
base : ' ./ ' ; //指定当前目录为顶级目录
})
模块标识永远相对于require出现的文件路径。
14、require.async( './文件' )实现异步按条件加载
if(true){require('./a')}else{require('./b')}这时候a和b文件都会被加载下来
require是所有加载成功之后才解析和执行
require.async可以按照条件进行加载,代码执行到具体位置的时候才会加载和执行
if(true){
require.async('./b' , function (foo){
console.log(foo) ; // foo就是在./b 文件中表露出来的内容
})
}else {
require.async('./a' , function () { } )
}
15、exports 和 module
module.exports就是模块对外导出 的接口对象,相当于执行了 return module.exports
exports就是module.exports的一个别名而已。
module.exports就是当前模块与外部文件的接口对象。
首先需要明白:
var foo2 = {}
var foo3 =foo2
foo3.name = 'name' // 这是修改了foo3 ,它的引用也被修改
console.log(foo2)
console.log(foo3)
foo3 = 'hello' // 这是对foo3重新赋值后,就丢失了原来foo2的引用
console.log(foo2)
console.log(foo3)
然后:
var foo ={
obj : {}
}
function changeFoo(obj,foo){
console.log(obj===foo.obj) //true
obj.name = 'jack'
obj = 'hello'
console.log(obj===foo.obj) //false
return foo.obj
}
console.log(changeFoo(foo.obj,foo)) // {name : jack}
最后:
obj 就相当于 exports,foo 就相当于 module。综上所述可知,不能给exports重新赋值,这样就切断了exports与module.exports之间的联系,必须通过 点 的形式修改exports的值。
16、浏览器中的JS不能做什么?
不能操作数据库、不能操作文件、浏览器的JS只能通过AJAX发送请求而不能接受请求(后面的Socket网络编程就可以进行双向通信了)
JS可以脱离浏览器单独运行(这时候就没有BOM和DOM), JS仅仅是语言而已(以前所学的JS仅仅是ECMAScript)
- javascript模块化开发(二)
模块化开发(一) ES6模块化 详解 ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict". 顶层的this指向undefined,即不应该在顶层代码 ...
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...
- msp430入门学习44
msp430的其他十二 msp430入门学习
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- seaJs模块化开发简单入门
随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...
- JavaScript学习总结(六)——前端模块化开发
早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...
- 前端模块化开发学习之gulp&browserify篇
随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发 ...
- seajs进行模块化开发
seajs进行模块化开发 模块化前端开发入门指南(二) 2015-08-26 15:23 by paseo, 370 阅读, 0 评论, 收藏, 编辑 概览 使用seajs模块化加载器进行模块化开发, ...
- SeaJS入门教程系列之使用SeaJS(二)
SeaJS入门教程系列之使用SeaJS(二) 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-03我要评论 这篇文章主要介绍了SeaJS入门教程系列之使用SeaJS,着重介绍了SeaJ ...
随机推荐
- C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique
std::sort 对vector成员进行排序; std::sort(v.begin(),v.end(),compare); std::lower_bound 在排序的vector中进行 ...
- 【转载】Appium环境搭建(Windows版)
注:appium安装到C盘,node.js安装到C盘 一.安装node.js 1.到官网下载node.js:https://nodejs.org/en/download/ 2.获取到安装文件后,直接双 ...
- oracle中的冷热备份
oracle有四种备份方法:冷备份.热备份.RMAN备份.逻辑备份. 其中冷备份和热备份都是用操作系统命令对oracle文件直接进行拷贝, 不同的是冷备份是把数据库关闭后再备份,备份过程中也要关闭数据 ...
- Python基础之字符的编码
参考原文 Python廖雪峰 为什么要进行编码? 计算机只能处理二进制数字(0100111),要处理文本,就必须先把文本转为数字才能处理,这个过程就叫编码. 字符的编码 ASCII编码 由于计算机是美 ...
- TWaver HTML5之树形布局
转眼间春节假期已经过完,作为一个职业的程序猿,不知道大家有没有这样的感觉,一天不碰电脑,总觉得生活少点什么.今天是春节后上班的第三天,给大家分享一下我们前段时间的一个需求,需求是这样的:界面中的网元分 ...
- Linux修改系统时间与时区
GMT (Greewich Mean Time) 格林威治标准时间:GMT是老的时间计量标准,根据地球的自转和公转来计算时间,也就是太阳每天经过位于英国伦敦郊区的皇家格林尼治天文台的标准时间就是中午 ...
- Linux学习笔记记录(四)
- python3接口测试某个模块的很多接口有的用post有的用get
没啥好说的,啊哈哈 大神提示可以判断下用post还是get,但是加到哪里合适呢?仔细看认真看 耶耶耶
- 抓包工具的感触(charles and fiddler)
最近测mobile,一直徘徊在fiddler 和 charles之间: charles 的证书装了 ,才能正常抓包: 后来因为重定向,分享到扣扣,微信的跳转功能,跳转到wap 或者跳转到PC 或者跳 ...
- 洛谷 1984 [SDOI2008]烧水问题
[题解] 烧开每一杯水之后都用它去把其他没烧开的水焐热,这样显然是最优的.然后推推式子或者列表找规律就好了. #include<cstdio> #include<algorithm& ...