Seajs相关知识

seajs.Use 引入入口文件

第一个参数表示模块id

字符串表示一个模块id

数组,数组每个成员表示一个模块

第二个参数表示回调函数(可有可无的)

作用就是当模块加载完成执行回调函数

作用域是全局作用域

参数与前面加载的模块是一致的

Use方法返回值是seajs对象,因此可以链式调用

Seajs默认根目录是seajs文件所在的目录,因此我们通常要将seajs文件放在最外面

文件只需要引入seajs文件,其他的是要通过seajs引入的

通常来说入口文件只有一个,所以链式调用时候,很少见,在一个use方法回调函数内部不能知道其他use方法什么时候加载完毕

Define 定义模块的,根据传递的参数我们分成三类

第一类 传递一个参数

如果是一个值类型的数据,那么这个数据直接作为接口暴漏出来

如果是一个对象,那么这个对象就是暴漏的接口

如果是一个函数(最常见的一种方式,它符合commonjs规范),

作用域是全局作用域

参数有三个

Require 加载模块的

Exports 定义接口的

Module 模块的对象

第二类 传递两个参数

第一个参数

如果是字符串 表示模块的id

如果是数组 表示模块的依赖集合

此时不论模块有没有使用该模块都会去加载它,并且不会去解析模块内部require方法

第二个参数表示模块函数(对象等其他数据)这个函数的使用方式跟上面函数式一致的

第三类 传递三个参数

第一个参数 是字符串,表示模块id

第二个参数 是数组,表示依赖集合

第三个参数 函数(其他数据),模块函数,函数的使用方式跟上面的函数式一致

通常来说一个文件只能添加一个模块(模块没有定义id),如果定义了多个模块,后面的覆盖前面的

如果模块定义了id,此时这些模块是兼容的,引用这些模块的时候,一定要通过这些id引用

Require加载模块

1 不能简写,在模块函数的参数中

2 不能修改

不能赋值

不能定义变量

不能作为函数参数

在子函数中不能修改

3 使用时不能使用表达式

当我们定义模块id时候,此时我们不能直接引入该模块

想使用模块要分成两步

第一步 在依赖模块集合中引入该模块

第二步 在模块内部用require引入模块id

接口exports 包含commonjs规范定义接口的语法

1 exports.接口

可以继续添加接口

2 module.exports.接口

可以继续添加接口,并且1和2是可以混用的

3 module.exports = {}

定义全部的接口,不能在使用前面两种定义接口方式

4 return {}

定义全部的接口,此时会将前面所有接口覆盖掉

5 return function () {}

定义接口函数,使用时候,必须调用它

6 module.exports = function () {}

定义接口函数

7 define(值类型)

定义一个值类型的数据接口

8 module.exports = 值类型

定义一个值类型的数据接口

9 return 值类型

定义一个值类型的数据接口

10 define({})

定义一个对象接口

注意

定义接口的优先级

Return  > module.exports = {}或者function > module.exports.接口 或者exports.接口

Exports绝对不能赋值对象 exports = {}

定义接口函数时候,有两种方式

第一种

Return function 或者module.exports = function

第二种

Var demo = function () {}或者function demo (){}

Return demo 或者module.exports = demo

模块module

Id 表示模块的id,如果定义模块没有添加id的时候,模块的id就是uri

Uri表示模块所在文件的地址

Exports表示模块暴漏的接口

Status 模块的状态

Dependencies 依赖的模块,是一个数组 每个成员表示一个模块的id

Deps 依赖的模块,是个对象,对象属性表示模块的id,对象属性值表示模块的信息对象

异步加载模块 require.async

与use方法很像,只不过一个在模块外部使用,一个在模块内部使用

与require的区别,require遵守commonjs规范是同步加载的,require.async是异步加载的

Require引入就可以使用

Require.async 在引入后,的回调函数中才能使用,函数返回值就是require对象

在if语句中

如果条件成立

Require会加载并执行该模块

Require.async 会一步加载模块,并执行

如果条件不成立

Require会加载模块,但不会执行

Require.async 不会加载模块,也不会执行

在异步操作中

例如在定时器中

Require会立即加载文件,但是等到定时器执行的时候才会执行模块函数

Require.async 会等到异步操作执行的时候,加载并执行模块

配置config

配置是seajs为我们提供的功能,但是我们想使用就要配置这些信息

Alias 创建模块的别名

作用简化对模块的引用

值是一个对象

对象的属性名称表示别名

对象的属性值表示真实路径

Path 定义路径

作用 简化对模块路径书写

值是一个对象

Key表示简化的路径

Value表示真实的路径

Map 定义模块映射关系的

批处理模块的

值是一个二维数组

数组的每个成员表示一组映射规则,每个映射规则是一个数组

第一个成员表示匹配的规则

第二个成员表示处理的规则

Debug 进入调试模块,可以看到js加载过程

Vars 定义路径模板变量

作用可以是引入的模块动态会

模板语法 {}, 在路径的{}中我们可以使用vars中定义的变量

值是一个对象

Key 表示变量

Value表示变量的值

Charset 定义js文件加载时候的编码格式,

Base 定义模块的根路径,它的值是个字符串,此时根路径就是个字符串指向的目录,此时seajs文件可以随意的防止了

Seajs插件

我们需要的功能,seajs没有帮我们实现,别人帮我们了,我们使用别人提供的代码,这些代码就是插件,我们使用这些插件就要去加载这些插件文件

在seajs中使用插件,一定要写在seajs标签后面(插件依赖于seajs),对于一些插件是需要写配置的,例如预加载插件

预加载插件

在模块加载过程中有限加载某些文件(通常这些文件都是一些代码工具库,或者框架)

这些文件的特征是,都会提供一个全局变量方便我们使用它

这个插件的作用

1 我们不用在每一个模块内显性的引入它,而可以直接使用他们(因为他们提供了全局变量)

2 我们不需要修改这些文件的源代码,因为他们提供全局变量

3 在更新代码库的时候成本低,我们只需要更改配置就可以了,因为每个版本提供的全局变量的,

预加载插件加载时间(让我们知道,我们什么时候可以使用这些预加载的库)

在调用use方法之后,模块加载之前开始加载这些库的

所以配置项要写在use方法之前(所有的配置都要写在use方法之前,或者整个项目的最前面)

在配置中,我们通过preload属性加载库

Preload是一个数组,每一个成员代编一个文件

1

Css插件

到目前为止,我们学的加载文件都是加载的js文件,有时我们在工作中开发项目时候,我们写的不仅仅是js,还有css,此时如果对于一个搜索框,我们通常将他们的js与css写在一起,此时如果js是一个模块化开发文件,我们通常需要将css引入进来,这样就会是css与js产生依赖。使他们形成一个整体

使用css插件就要加载seajs-css文件

使用方式:

第一步在seajs标签后面引入该文件标签

第二步,哪个js模块需要什么css文件就通过require引入它

注意引入的css文件一定要加上.css后缀名

Use方法不仅仅可以引入js文件,还可以引入css文件,所以对于一些在渲染之前就要加载的css文件我们可以写在这里

sea.js详解的更多相关文章

  1. 【three.js详解之一】入门篇

    [three.js详解之一]入门篇   开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...

  2. 【three.js详解之二】渲染器篇

    [three.js详解之二]渲染器篇   本篇文章将详细讲解three.js中渲染器(renderer)的设置方法. three.js文档中渲染器的分支如下: Renderers CanvasRend ...

  3. [js高手之路]深入浅出webpack系列2-配置文件webpack.config.js详解

    接着上文,重新在webpack文件夹下面新建一个项目文件夹demo2,然后用npm init --yes初始化项目的package.json配置文件,然后安装webpack( npm install ...

  4. [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)

    本文继续接着上文,继续写下webpack.config.js的其他配置用法. 一.把两个文件打包成一个,entry怎么配置? 在上文中的webpack.dev.config.js中,用数组配置entr ...

  5. [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  6. dev-server.js详解

    转载自:https://www.cnblogs.com/ye-hcj/p/7091706.html dev-server.js详解 require('./check-versions')() var ...

  7. webpack.dev.conf.js详解

    转载自:https://www.cnblogs.com/ye-hcj/p/7087205.html webpack.dev.conf.js详解 //引入当前目录下的utils.js文件模块var ut ...

  8. JS 详解 Cookie、 LocalStorage 与 SessionStorage-转载

    记录一下这些知识,有时候用到会忘记,对原文作者表达感谢. 附上原文链接:JS 详解 Cookie. LocalStorage 与 SessionStorage 基本概念 Cookie Cookie 是 ...

  9. require.js详解

    一:什么是require.js ①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染 ...

随机推荐

  1. 在Centos下搭建git并可以通过windows客户端访问

    亲测在本地虚拟机和远程服务器上无问题,如有不懂请留言. 注意事项:以下所有操作是在root权限下操作的.1.Centos服务器版本centos6.5 2.首先安装git,使用yum在线安装 yum i ...

  2. 通过squid 禁止访问/只允许访问指定 网址

    安装 squid yum install squid -y 备份squid.conf cp  squid.conf  squid.conf-list vi  squid.conf 输入: acl de ...

  3. Linux学习

    Linux 命令英文全称su:Swith user 切换用户,切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du ...

  4. Unity C#最佳实践(上)

    本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...

  5. Linux学习日记-(一)

    一.为什么学习Linux 大学时开始接触Linux,最开始学习的是RedHat(小红帽),感觉Linux好像很久不见的老朋友,用起来很舒服(虽然我们用的是DotNet).很喜欢它的命令模式,让我能接触 ...

  6. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  7. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  8. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  9. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  10. Chrome 控制台不完全指南

    Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...