模块的加载启动

Sea.js 是一个模块加载器,模块加载器需要实现两个基本功能:

  1. 实现模块定义规范,这是模块系统的基础。
  2. 模块系统的启动与运行。

模块定义规范的实现

这就是 definerequireexportsmodule 的实现。具体实现细节,有兴趣的可以看 Sea.js 的源码:seajs/src。可以按照 Gruntfile.js 中声明的合并顺序阅读,核心是 module.js 文件。

define 等方法的具体使用,请阅读:CMD 模块定义规范

模块系统的启动

有了 define 等模块定义规范的实现,我们可以开发出很多模块。但光有一堆模块不管用,我们还得让它们能跑起来。

首先就是启动问题。比如在 Node 中,启动很简单:

$ node main.js

这就是启动。

再举一个例子,操作系统的启动:大家都知道的,按一下开机键就好。

在 Sea.js 里,要启动模块系统很简单:

<script src="path/to/sea.js"></script>
<script>
  seajs.use(‘./main‘);
</script>

seajs.use Function

用来在页面中加载模块。

seajs.use seajs.use(id, callback?)

通过 use 方法,可以在页面中加载任意模块:

// 加载模块 main,并在加载完成时,执行指定回调
seajs.use(‘./main‘, function(main) {
  main.init();
});

use 方法还可以一次加载多个模块:

// // 并发加载模块 a 和模块 b,并在都加载完成时,执行指定回调
seajs.use([‘./a‘, ‘./b‘], function(a, b) {
  a.init();
  b.init();
});

callback 参数可选,省略时,表示无需回调。

与 DOM ready 的关系

注意seajs.use 与 DOM ready 事件没有任何关系。如果某些操作要确保在 DOM ready 后执行,需要使用jquery 等类库来保证,比如:

seajs.use([‘jquery‘, ‘./main‘], function($, main) {
  $(document).ready(function() {
    main.init();
  });
});

sea.js 的引入

在调用 seajs.use 之前,需要先引入 sea.js 文件,推荐直接使用 script 标签同步引入:

<script src="path/to/sea.js"></script>

为了满足某些场景下的性能优化需求,也可以将 sea.js 的源码内嵌:

<script>
// sea.js 的源码
</script>

注意:代码内嵌时,需要通过 seajs.config 手动配置 base 路径。

最佳实践

  1. seajs.use 理论上只用于加载启动,不应该出现在 define 中的模块代码里。在模块代码里需要异步加载其他模块时,推荐使用 require.async 方法。
  2. 引入 sea.js 时,可以把 sea.js 与其他文件打包在一起,可提前合并好,或利用 combo 服务动态合并。无论哪一种方式,为了让 sea.js 内部能快速获取到自身路径,推荐手动加上 id 属性:
<script src="path/to/sea.js" id="seajsnode"></script>

加上 seajsnode 值,可以让 sea.js 直接获取到自身路径,而不需要通过其他机制去自动获取。这对性能和稳定性会有一定提升,推荐默认都加上。

小结

seajs.use 是模块加载器必备的一个接口。在 seajs 上,还有用于配置的 config 方法、方便调试的cache 等接口,这些会在接下来的文档中详细阐述

更多开发学习资料请访问www.javarecord.com

时间: 2024-10-09 23:26:38

模块的加载启动的相关文章

centos6.8防火墙模块未加载

使用阿里云服务器下的centos6.8系统,开启或关系或查询防火墙的状态时,提示防火墙模块未加载. 解决办法: modprobe ip_tables #加载ip_tables模块 modprobe iptable_filter #加载iptable_filter模块 [[email protected] ~]# lsmod | grep iptable #查看模块,有模块即解决了 iptable_filter 2173 0 ip_tables 9567 1 iptable_filter 这时再次

Python模块动态加载机制

本文和大家分享的主要是python中模块动态加载机制相关内容,一起来看看吧,希望对大家学习python有所帮助. import 指令 来看看 import sys 所产生的指令: co_consts : (0, None) co_names : ('sys',) 0 LOAD_CONST               0 (0) 2 LOAD_CONST               1 (None) 4 IMPORT_NAME              0 (sys) 6 STORE_NAME  

seajs2.3学习日志 简单尝试模板+数据合并、模块异步加载、非标准CMD模式定义define模块

今天继续尝试seajs 2.3的版本,那做点什么demo好呢,就来一个简单是数据模板吧,然后通过其他一些细节深入学习 先看看目录结构,按照官方demo架设 index.html只是简单入口文件和seajs的配置项,最下面有一个seajs.use加载crontroller模块,然后回调暴露的combine方法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

模块已加载,但对dllregisterServer的调用失败

在注册dll或者ocx的时候, 经常会遇到这么一个问题: 模块  已加载,但对dllregisterServer的调用失败,错误代码为0x8004***** 网上有网友回复说需要在管理员的模式下进行注册:本人测试过, 会出现如下问题: 模块  加载失败.请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的 .dll文件是否有问题.  找不到指定的模块 还是没有能解决问题,经过长时间尝试,终于用以下方式的第一点解决了问题 本人亲测:至于另外的方式,我没有测试过. 以下是解决win7运

004-ant design pro安装、目录结构、项目加载启动

一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等,而src目录中又包含components目录等等.每次在新建项目时,手动创建这些固定的文件目录.脚手架的作用就是帮助你完成这些重复性的工作,包括一键生成主要的目录结构.安装依赖等等. 1.2.参考地址 ant design参看地址:https://ant.design/docs/react/intr

016-1 模块-模块的加载顺序、导入执行流程

1.模块的加载顺序:内存=>内置=>sys.path import sys sys,path #环境变量:存放文件路径的列表 # 重点:默认列表的第一个元素就是当前被执行的问建所在的目录 # 可以自定义往sys.path添加路径sys.path.append(r'想导入的模块的绝对路径')  # 添加到环境变量最后,最后被查找sys.path.insert(0, r'想导入的模块的绝对路径')  # 添加到指定索引,索引就决定了自定义模块的查找顺序 2.模块的导入执行流程 导入模块的指令: -

[PHP] 测试模块是否加载

开发时遇到叫用函数 错误. 可能原因应该是dll未加载. 这边可以使用 方法测试.? get_extension_funcs 官方说明如下: http://php.net/manual/en/function.get-extension-funcs.php function testGD(){ $testGD = get_extension_funcs("gd"); // Grab function list if (!$testGD){ echo "GD not even

AngularJS深入(1)——加载启动

本系列文章的分析基于AngularJS v1.4.2. 参考资料有: AngularJS API Docs AngularJS Developer Guide AngularJS实战 Service vs provider vs factory 1. 整体结构 AngularJS的源码在整体上,与其它很多库和框架一样,是一个自执行函数,其整体结构简化如下: (function(window, document, undefined) { // define variables and funct

nodejs 模块以及加载机制,主要讨论找不到模块的问题

最主要的一个思想,加载模块无非就是找到模块在哪,只要清楚了模块的位置以及模块加载的逻辑那么找不到模块的问题就迎刃而解了.本文只是综合了自己所学的知识点进行总结,难免出现理解错误的地方,请见谅. nodejs的模块分类 1.原生模块:http  fs path等,这些模块都在源码包的lib目录下面,nodejs安装好之后是找不到这些模块的,都作为node.exe的一部分了,require这些模块永远没问题的,如果哪天出现问题了,直接重启电脑或者重装node.有什么疑问可以通过下载源码对这些原生模块