jQuery修改成SeaJs的模块代码非常简单,就是用下面这段语句将jQuery源代码包裹起来:

  1. define('jquery',[],function(require, exports, module){
  2. //这里放jQuery源代码
  3. module.exports = jQuery;
  4. });

也可以加一个判断,如果define已经被定义,就把jQuery模块化,如果define没有被定义,正常执行jQuery代码:

  1. /*
  2. * http://julabs.com
  3. */
  4. (function(factory) {
  5. if (typeof define === 'function') {
  6. define('/jquery', [], factory);
  7. }
  8. else {
  9. factory();
  10. }
  11. })(function(require) {
  12. //这里放jQuery源代码
  13. if (require) return $.noConflict(true);
  14. });

如果你用的是jQuery1.7版本以上的,那就更方便了。可以看下jQuery源码的最后几行,你会发现类似下方的代码:

  1. if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
  2. define( "jquery", [], function () { return jQuery; } );
  3. }

如果判断语句为真,那么jQuery就会自动模块化。所以改下判断语句,只留typeof define === "function"jQuery便可以自动模块化:

  1. if ( typeof define === "function") {
  2. define( "jquery", [], function () { return jQuery; } );
  3. }

模块化后的调用代码如下:

  1. <script src="/script/sea.js"></script>
  2. <script>
  3. /*
  4. * http://julabs.com
  5. */
  6. seajs.config({
  7. 'base':'/script',
  8. 'alias':{
  9. 'jquery':'jquery.sea.js'
  10. }
  11. });
  12. seajs.use(['jquery'],function($){
  13. console.log($);
  14. });
  15. </script>

jQuery插件的模块化:

以一个简单的插件为例:

  1. /*!
  2. * http://julabs.com
  3. */
  4. (function($){
  5. $.sayHello = function(){
  6. console.log("Hello");
  7. };
  8. })(jQuery)

一般模块化代码像下面这样:

  1. /*!
  2. * http://julabs.com
  3. */
  4. (function (factory) {
  5. if (typeof define === 'function') {
  6. // 如果define已被定义,模块化代码
  7. define('jquerySayHello',['jquery'], function(){
  8. // 返回构造函数
  9. return factory
  10. });
  11. } else {
  12. // 如果define没有被定义,正常执行插件代码
  13. factory(jQuery);
  14. }
  15. }(function ($) {
  16. // 这里才是插件真正的构造函数
  17. console.log('init'); // 注意这行代码
  18. $.sayHello = function(){
  19. console.log("Hello");
  20. };
  21. }));

使用插件的代码如下:

  1. seajs.config({
  2. 'base':'/script',
  3. 'alias':{
  4. 'jquery':'jquery.sea.js',
  5. 'jquerySayHello':'jquery.sayHello.sea.js'
  6. }
  7. });
  8. seajs.use(['jquery','jquerySayHello'],function($,jquerySayHello){
  9. jquerySayHello($); // 初始化插件
  10. $.sayHello();
  11. });
  12. seajs.use(['jquery','jquerySayHello'],function($,jquerySayHello){
  13. jquerySayHello($); // 初始化插件
  14. $.sayHello();
  15. });

注意我在插件构造函数里面写的console.log('init');这段代码,可以看到,如果我请求两次插件,插件就要初始化两次。这个虽然可以让代码只在使用时才执行,减少了资源消耗,但如果一个页面中多处需要这个插件的话,就要执行很多次。如果改成下面这种,直接在本模块里就执行:

  1. /*!
  2. * http://julabs.com
  3. */
  4. (function (factory) {
  5. if (typeof define === 'function') {
  6. // 如果define已被定义,模块化代码
  7. define('jquerySayHello',['jquery'], function(require,exports,moudles){
  8. factory(require('jquery')); // 初始化插件
  9. return jQuery; // 返回jQuery
  10. });
  11. } else {
  12. // 如果define没有被定义,正常执行jQuery
  13. factory(jQuery);
  14. }
  15. }(function ($) {
  16. console.log('init');
  17. $.sayHello = function(){
  18. console.log("Hello");
  19. };
  20. }));

使用插件的代码如下:

  1. /*
  2. * http://julabs.com
  3. */
  4. seajs.config({
  5. 'base':'/script',
  6. 'alias':{
  7. 'jquery':'jquery.sea.js',
  8. 'jquerySayHello':'jquery.sayHello.sea.js'
  9. }
  10. });
  11. seajs.use(['jquery','jquerySayHello'],function($){
  12. $.sayHello();
  13. });
  14. seajs.use(['jquery','jquerySayHello'],function($){
  15. $.sayHello();
  16. });

可以看到,插件的构造函数只执行了一次。

seajs模块化jQuery与jQuery插件【转】的更多相关文章

  1. ***使用jQuery去封装插件(组件化、模块化的思想),即扩展方法

    如何使用jQuery去封装插件,区分扩展全局方法与扩展一个普通的jQuery实例对象的方法 1.给全局对象扩展方法:①$.方法 = function(参数可加可不加){}  ②使用:$.方法(有参数的 ...

  2. 使用requireJS的shim参数 解决插件 jquery.ui 等插件问题

    没有requireJS框架之前,如果我们想使用jquery框架,会在HTML页面中通过<script>标签加载, 这个时候jquery框架生成全局变量$和jQuery等全局变量.如果项目中 ...

  3. 推荐几款jquery图片切换插件

    一.前言 毕业季到了,大家都在匆匆忙忙的记录大学里最美好的时光,照片中各种花式.各种姿势都涌现出来了.这么多的照片怎么展示出来给自己的好友看呢?有人选择做成视频,有人选择ps之后做成图片集,而我选择利 ...

  4. 提升用户体验的最佳免费 jQuery 表单插件

    网页表单是一个老生常谈的话题.出于这样或那样的目的,一些示例中都会包括用户注册,电子商务结算,用户设置甚至联系人表格.而输入栏是非常容易用现代的CSS3技术来应用样式.但是到底什么决定整体用户体验? ...

  5. jQuery为开发插件提拱了两个方法:jQuery.fn.extend(); jQuery.extend();

    jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); jQuery.fn jQuery.fn = jQuery.prototype ...

  6. jQuery 人脸识别插件,支持图片和视频

    jQuery Face Detection 是一款人脸检测插件,能够检测到图片,视频和画布中的人脸坐标.它跟踪人脸并输出人脸模型的坐标位置为一个数组.我们相信,面部识别技术能够给我们的 Web 应用带 ...

  7. myWaterfall - jQuery瀑布流布局插件

    myWaterfall - jQuery瀑布流布局插件 Demo http://jsfiddle.net/q3011893/p5k2ogy8/embedded/result,html,css,js/ ...

  8. 推荐15款最佳的 jQuery 分步引导插件

    当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...

  9. Cropper – 简单的 jQuery 图片裁剪插件

    Cropper 是一个简单的 jQuery 图像裁剪插件.它支持选项,方法,事件,触摸(移动),缩放,旋转.输出的裁剪数据基于原始图像大小,这样你就可以用它们来直接裁剪图像. 如果你尝试裁剪跨域图像, ...

随机推荐

  1. oracle之三手工不完全恢复

    手工不完全恢复 4.1 不完全恢复的特点: 1)让整个database 回到过去某个时间点,不能避免数据丢失. 2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(考点). 3)必须以 ...

  2. python中实现参数化的原理

    k就是   <参数名>

  3. 【Flutter 实战】路由堆栈详解

    老孟导读:Flutter中路由是非常重要的部分,任何一个应用程序都离不开路由管理,此文讲解路由相关方法的使用和路由堆栈的变化. Flutter 路由管理中有两个非常重要的概念: Route:路由是应用 ...

  4. fiddler工具介绍及证书设置

    fiddler 目录 1.Fiddler介绍 01.介绍 02.简单使用 03.结果状态码 介绍完了,接下来就到证书了 2.Fiddler证书设置 这就是fiddler证书设置的全部步骤了 1.Fid ...

  5. JavaCV与OpenCV的区别和使用中遇到的问题

    写这篇随笔的原因是因为我用了JavaCV一段时间后项目情况糟透了,可能大家很熟悉OpenCV,也有一部分人熟悉JavaCV,但是我相信真正把JavaCV用到生产上的不是太多. 我参与图片处理项目快一个 ...

  6. Redis学习(一)认识并安装redis

    一.初识redis Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的. Redis是运行在内存中的,但是可 ...

  7. 刷题[WUSTCTF2020]CV Maker

    解题思路 好家伙,打开一看像是cms,又看名字CV Maker.我以为直接要搜cve打了.搜了一会发现没什么啊.那先正常做把. 注册 注册成功后这里报错,猜测可能有注入点.先放在这里,继续登陆.发现是 ...

  8. java安全编码指南之:异常处理

    目录 简介 异常简介 不要忽略checked exceptions 不要在异常中暴露敏感信息 在处理捕获的异常时,需要恢复对象的初始状态 不要手动完成finally block 不要捕获NullPoi ...

  9. 剑指offer-递归和循环

    1. 斐波那契数列 解: 没啥好说的了,直接上高效的滚动迭代解法.矩阵解法和特征根解法这里不讨论了. class Solution: def Fibonacci(self, n): # write c ...

  10. Azure Cosmos DB (一) 入门介绍

    一,引言 今天是国庆.中秋双节房价的第三天,今天抽时间分享一篇关于使用Azure 提供的一项NoSql 服务-----Azure Cosmos DB.就有人问了,我听说过 MongoDB.Redis ...