`
yiminghe
  • 浏览: 1460342 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模块与包的S设计

阅读更多

   理论可见上文模块加载方案 ,这次探讨下如何设计 api 使用 js 模拟其他语言常见的模块 的概念:

 

 

模块化实践@google doc

 

 

 

1.添加模块:

 

通过 S.add 向运行环境添加模块,模块可以添加一个简单对象,或者一个加载函数。

 

简单对象:

 

S.add("module1",{
name:"value"
});
 

加载函数:

 

S.add("module2",function(S){
   return  something;
});
 

如果添加的是加载函数,模块真正的值则是该函数的执行结果。

 

依赖注入:

 

添加模块时可以通过声明该模块的依赖模块名字,运行环境会将依赖的模块值通过参数注入到加载函数中:

 

S.add("module3",function(S,DOM,module2){

// DOM 为 dom 模块的值
//module2 为 模块2 的值

可以使用 dom ,module2 构建复杂的 module3

return module3;

},{
  requires:["dom","module2"]
});

 

引用子模块:

 

声明依赖模块后,可以通过 require 来使用依赖模块的子模块:

 

S.add("module_event",function(S,Event){
//引入子模块
var EventTarget=S.require("event/target");
},{
  requires:["event"]
});
 

 

2.包与模块命名空间

 

添加模块时可以通过 “/” 引入模块命名空间 :

 

S.add("js/lang/integer",function(){
  function Interger(){}
  return Integer;
},{requires:["js/lang/core"]});
 

将定义文件放入 : http://modules/js/lang/interger.js 中,使用时,通过

 

S.packages({
  name:"js"
  path:"http://modules"
});
 

来声明 js package 对应的路径(url,not file path),而 js 包下可类似定义多个同类模块。

 

最终通过 use 来使用某个模块:

 

S.use("js/lang/interge",function(S,Integer){
//use Integer now !
});
 

3.执行流程

 

S.use("A",function(S,A){});
 

 

下载模块A,下载模块A的依赖 a,执行 a 的加载函数并初始化 a 模块值,注入 a 到 A 的加载函数并执行,初始化 A 的模块值,最终注入A到用户回调函数并执行。

 

demo using S

 

小结:

 

约定优先配置,模块名隐含路径

去除冗余信息,模块名代表了命名空间,不需重新挂载

 

内置模块例如 dom ,event 并无包,属于 unnamed package ,应用模块推荐使用包机制并且顶层包名不要和内置模块冲突。

 

4.后期优化

 

主要就是自动化合并,自动管理依赖项,可见:定制模块编译工具

 

 

分享到:
评论
2 楼 yiminghe 2011-01-05  
jiahao1110 写道
将定义文件放入 : http://modules/java/lang/interger.js 中,使用时,通过

Js代码
S.packages({ 
  name:"js" 
  path:"http://modules" 
}); 

来声明 js package 对应的路径(url,not file path),而 js 包下可类似定义多个同类模块。

这个不是很明白??


小错误:是 js 不是 java :
表示对js开头的模块,从http://modules下加载,可看例子:

demo using S
1 楼 jiahao1110 2011-01-05  
将定义文件放入 : http://modules/java/lang/interger.js 中,使用时,通过

Js代码
S.packages({ 
  name:"js" 
  path:"http://modules" 
}); 

来声明 js package 对应的路径(url,not file path),而 js 包下可类似定义多个同类模块。

这个不是很明白??

相关推荐

    AP6356S AP6398S系列WiFi模块应用参考电路

    标签的存在可以让我们快速识别模块,并在设计过程中找到与之相关的技术规格与应用指导。 【部分内容】中包含了参考电路设计的细节,具体到每个电阻、电容、晶振等元件的标记和值。对于电路设计而言,这部分内容提供...

    华为 4G 模块 ME909S-82技术资料手册datasheet模块硬件指南PCB设计指导开发板设计Guide等资料.zip

    描述了模块与主机之间的USB接口协议,包括USB配置、接口描述符的定义和处理,对于需要通过USB接口连接ME909S-82的开发者来说,是必不可少的参考资料。 6. **ME909S-821 LTE LGA模块验收检验指南**: 详细列出了...

    华为GPRS模块mu709s技术资料手册datasheet模块硬件指南PCB设计指导开发板设计Guide等资料.zip

    "华为模块UART串口设计指导-(V100R001_03, Chinese).pdf" 详细介绍了如何与mu709s模块进行UART通信。UART(通用异步接收/发送器)是一种常见的串行通信接口,该文档提供了配置参数、通信协议以及常见问题的解决方案...

    i2s_input模块设计参考

    文档《i2s_input模块设计说明.doc》可能详细介绍了该模块的功能、工作流程、配置选项以及与硬件的接口定义。它可能会涵盖以下几点: 1. **模块功能**:接收来自外部I2S设备的音频流,转换为数字信号,并提供给系统...

    华为LTE模块ME909s ME906s 系列模块在Win7/WinXp系统下驱动文件

    华为的LTE模块,如ME909s和ME906s系列,是专为高速移动数据通信设计的设备,广泛应用于嵌入式系统、工业路由器、车载通信以及物联网解决方案中。这些模块基于LTE技术,提供了高效、稳定的数据传输能力,能够支持4G...

    AP6275S wifi模块 资料

    AP6275S是一款高性能的Wi-Fi模块,支持Wi-Fi 6标准,也称为802.11ax。这个模块由领先的无线通信技术公司生产,为物联网(IoT)、智能家居、工业自动化等领域提供了高速、低延迟的无线连接解决方案。 Wi-Fi 6是最新...

    正基双天线WiFi模块AP6398S固件

    AP6398S固件资料包含了该模块的最新版本,提供了原厂的技术支持和设计指导,对于开发人员和工程师来说,是进行产品开发、优化和故障排查的重要资源。 首先,我们需要了解AP6398S模块的基本特点。AP6398S是一款802....

    笔记本电脑pcie华为4g模块ME909s-821驱动套件最新版Mobile Partner

    总的来说,这个驱动套件是为了解决笔记本电脑与华为4G模块ME909s-821之间的通信问题,确保用户能顺畅地通过4G网络进行上网、数据传输等活动。通过使用Mobile Partner,用户可以更好地管理和优化网络连接,同时享受到...

    语音合成模块-XF-S4240

    手册中通常会包含模块的电气特性、引脚定义、电源要求、功耗信息等关键内容,以便开发者进行硬件设计和系统集成。 此外,压缩包中的“XF-S4240.pdf”可能是模块的详细技术文档,包含更深入的技术规格和使用示例。...

    系统功能模块图与设计

    宿舍管理系统的功能模块设计基于C/S架构,主要包括以下几个大模块: 1. **系统管理模块** - 超级用户登录 - 普通用户登录 - 用户密码修改 - 用户管理 - 退出系统 2. **公寓管理模块** - 楼房管理 - 宿舍...

    Quectel_EC600S-CN_硬件设计手册_V1.01

    **Quectel EC600S-CN 硬件设计手册**是针对LTE标准模块系列的一个详细技术指南,主要用于指导用户进行硬件设计。这个模块由上海移远通信技术股份有限公司提供,该公司致力于为客户提供及时全面的服务。手册包含了...

    Quectel_EC200S-CN_硬件设计手册_V1.0.pdf

    《Quectel EC200S-CN 硬件设计手册》是针对Quectel公司的一款高性能LTE模块——EC200S-CN的详细设计指南。该手册旨在为电子工程师和产品研发人员提供必要的硬件设计信息,确保他们能够正确地集成这款模块到各种M2M...

    基于SW3518S的全协议快充电源模块USB Type-c接口设计 包含原理图及pcb文件

    在描述中提到的“包含原理图及pcb文件”,意味着资料包中包含了该电源模块的设计细节。原理图是电路设计的基础,展示了各个元器件之间的连接方式和工作原理,对于理解和分析电路至关重要。而PCB(Printed Circuit ...

    L9110S双路驱动模块电路图

    "LC-Motor-9110"可能是L9110S驱动模块的实际电路设计文件,可能包含PCB布局、电路原理图、元器件清单等,这些资料对于理解和使用L9110S驱动模块非常有价值。在实践中,根据这些图纸进行焊接和组装,可以构建出一个...

    JQ8400语音模块资料包

    其中,模块的硬件设计可以帮助你理解其工作原理,引脚定义指导你如何连接到你的电路中,功能介绍让你知道模块能做什么,指令集则提供编程接口,告诉你如何通过代码控制模块。 3. **测试音频**: 测试音频是评估...

    Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计APP

    Github已开源:...详细内容也可看我的文章:https://mp.csdn.net/mp_blog/creation/editor/124478948《Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】》

    基恩士PLC 定位模块KV-H40S 用户手册

    KV-H40S定位模块是一款专为CPU单元设计的定位单元,可以与步进电机或伺服电机一起工作,实现精密的定位控制功能。 在使用KV-H40S定位模块之前,用户需要仔细阅读本手册,并参考KV-H20S/H40S定位单元相关手册,这些...

    LED显示屏模块设计例子

    4. **模块化设计**:DI-P6.4F03M-89S-1.0模块化设计意味着它可以与其他相同或不同规格的模块拼接,形成更大面积的显示屏。这种设计方便了安装、维护和升级。 5. **硬件接口**:模块之间通常有连接器,用于电源和...

    DES加密Verilog模块设计

    在Verilog HDL(硬件描述语言)中设计DES加密模块,主要是将DES的算法逻辑转化为可综合的数字电路描述。Verilog是一种广泛用于数字电路设计的语言,可以用来描述从低级门电路到高级系统级别的设计。在Verilog中,DES...

Global site tag (gtag.js) - Google Analytics