seajs进阶

seajs进阶http blog csdn net it man article details 基础篇先请这里看 http blog csdn net it man article details 该页面列举了 SeaJS 中的常用实战过程中的问题 只要掌握这些方法 就可以娴熟地开始对你的网站进行模块化开发了 默认情况下 SeaJS 要求所有文

http://blog.csdn.net/it_man/article/details/

基础篇先请这里看http://blog.csdn.net/it_man/article/details/

该页面列举了 SeaJS 中的常用实战过程中的问题。只要掌握这些方法,就可以娴熟地开始对你的网站进行模块化开发了。

默认情况下,SeaJS 要求所有文件都是标准的 CMD 模块,但现实场景下,有大量 jQuery 插件等非 CMD 模块存在。在 SeaJS 里,通过以下方式,可以直接调用非标准模块。

全站通用的要加载的库只写一次,而不想每个js里都调用,太繁琐

//可以放在在 init.js 里暴露到全局,这样,所有在 init.js 之后载入的文件,就都可以直接通过全局变量来拿 $ 等对象。 seajs.use('init') //init.js define(function(require, exports) { var $ = jQuery = require('jquery'); // 暴露到全局 window.$ = $; });

1. 暴露 jQuery

jQuery 插件都依赖 jQuery 模块,为了加载 jQuery 插件,首先得将 jQuery 模块暴露出来:

// 配置 jquery 并放入预加载项中 seajs.config({  alias: {  'jquery': 'https://a.alipayobjects.com/static/arale/jquery/1.7.2/jquery.js'  },  preload: ["jquery"] }) // 将 jQuery 暴露到全局 seajs.modify('jquery', function(require, exports) {  window.jQuery = window.$ = exports })

2. 修改 jQuery 插件的接口

我们以 jquery.cookie 插件为例。

// 配置别名 seajs.config({  alias: {  'cookie': 'https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js'  } }) // 将 jQuery Cookie 插件自动包装成 CMD 接口 seajs.modify('cookie', function(require, exports, module) {  module.exports = $.cookie })

这样,在其他模块中,就可以直接调用 cookie 插件了:

a.js: define(function(require, exports) {  var cookie = require('cookie')  cookie('the_cookie')  cookie('the_cookie', 'the_value')  // ... })

完整范例:http://seajs.org/test/issues/auto-transport/test.html

seajs里版本号和时间戳问题

用 seajs 组织项目,上线后,经常需要更新特定文件或所有文件的时间戳,以清空浏览器缓存。最简单的方式是:

//用来维护 jquery 等类库模块的版本号 seajs.config({  alias: {  'jquery': 'jquery/1.6.2/jquery',  'backbone': 'backbone/0.5.1/backbone',  'a': 'a.js?',  'b': 'b.js?'  } }); //利用 map,批量更新时间戳是最方便的 seajs.config({  'map': [  [ /^(.*\.(?:css|js))(.*)$/i, '$1?' ] ] }); 

条件加载

第一种:把依赖的模块都在 define 头部手工声明,不再依赖 SeaJS 的自动解析功能。这个模块同时依赖 play 和 work 两个模块,加载器会把这两个模块文件都下载下来。如果需要在 require 模块之后串行执行代码,那么只能用这个方式。

define(['play', 'work'], function(require, exports) {  //是出去玩,还是工作?  var choice = require(condition() ? 'play' : 'work');  //选择的难度  console.log(choice.hard()); });

第二种:使用 require.async 来进行条件加载,从静态分析的角度来看,require.async适合需要执行动态加载的模块很大(比如大量 json 数据),不适合都下载下来。但是require.async 方式加载的模块,不能打包工具找到,自然也不能被打包进上线的 js 中;而前一种方式可以。

define(function(require, exports) {  require.async(condition() ? 'play' : 'work', function(choice) {  console.log(choice.hard());  }); });

按需加载

很多时候模块并不需要立即加载,等到需要时再加载,性能更好。

//init.js $("#J_PicCover").click(function(){  require.async('module/highlight', function(){  $(".buy-info").highlight({color:'#ffe5c4',speed:500,complete:function(){  },iterator:'sinusoidal'});  }); }); //highlight.js define(function(require, exports) {  jQuery.fn.highlight = function(settings) {  //…...  } });

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206939.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:09
下一篇 2026年3月19日 下午3:10


相关推荐

  • android 免费云测平台,免费的移动APP真机云测试平台|iTestin云测工具 v3.0.8[通俗易懂]

    android 免费云测平台,免费的移动APP真机云测试平台|iTestin云测工具 v3.0.8[通俗易懂]全球首款支持Android的App自动化测试工具.iTestin基于真实终端设备的脚本录制、回放,验证工具。友好、简便的操作界面,强大的脚本录制功能。适用于Android系统下的Phone和Pad。从简单到深入为Android应用程序测试.iTestin3.0实用功能概括:控件识别与坐标录制脚本支持脚本本地编辑功能支持滑屏,长按等操作支持账号及文本的输入支持脚本在不同分辨率安卓终端上运行支持脚本…

    2025年9月17日
    6
  • 零基础学Java(8)数组「建议收藏」

    零基础学Java(8)数组「建议收藏」数组数组存储相同类型值的序列。声明数组数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标(index,或称索引)可以访问数组中的每一个值。例如,如果a是一个整型数组,a[i]就是数组

    2022年8月7日
    4
  • python代码情话_python怎么运行代码

    python代码情话_python怎么运行代码做微信聊天机器人,实现步骤:1.获取微信的使用权,即python脚本能控制微信收发信息。2.python脚本收到聊天信息后,要对该信息进行处理,返回机器人的回应信息。我这里有一套Python从入门到精通的全套资料免费送给大家,但是要加我的Python学习Q群:808713721才可以免费领取,因为我在里面会私发给大家。简易版代码fromwxpyimport*#apikey在http://www.t…

    2025年12月7日
    9
  • 一小时搞定简单VBA编程 Excel宏编程快速上手

    一小时搞定简单VBA编程 Excel宏编程快速上手Excel宏编程可以快速完成批量表格操作:复制粘贴、数据过滤等,宏代码基于VB语言实现,有基础的编程经验就能快速阅读。下面是我的学习笔记。1.ExcelVBA编辑界面(进入路径:sheet名称–>鼠标右键菜单–>查看代码)2.输入代码方法:在VBE编辑器的代码模块中输入VBA代码,通常有以下几种方法:■手工键盘输入;■使用宏录制器,即选择菜单“工具—…

    2022年6月6日
    47
  • 实例与数据库的区别_mysql数据库实例是什么

    实例与数据库的区别_mysql数据库实例是什么mysql目前是开源界应用最为广泛的数据库软件了。相对于重量级的商业产品如oracle、DB2、SQLServer等,Mysql最大的特点就是开源免费。个人用户可以down一个下来,自己搭个网站玩玩。大型互联网企业诸如阿里、网易之类的也可以针对mysql做mysql集群和存储引擎的开发。今天主要是想解释一下mysql体系中,数据库和数据库实例的概念。很多人都在用mysql,也有很多人认为数据库就…

    2022年10月21日
    5
  • c语言中rcu缩写,TREE RCU实现

    c语言中rcu缩写,TREE RCU实现TREERCU 实现之一 数据结构代码分布在分析代码之前 先看看代码的分布情况 RCU 实现的代码包含在下列一些文件中 此处用到的是 linux3 6 4 的代码 include linux rcupdate h RCU 实现的头文件 所有使用 RCU 的代码都需要包含它 include rcutree h 包含 rcupdate h 中没有包含的函数声明 amp l include include

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号