seajs初尝 加载jquery返回null解决学习日志

原文地址:http://www.tuicool.com/articles/bmuaEb

今天早上初尝seajs,发现一个非常蛋疼的事情,使用官方demo中的jquery是没有问题,

下载官方最新版jquery 2.1.1发现console.log($)返回null,百思不得其解!只能求助度娘!

在GitHub发现了玉伯的说明 《 直接调用 jQuery 插件等非标准模块的方法 》

不过这方法在2.3版本貌似已经不行,seajs.modify方法已在这版本移除!

https://github.com/seajs/seajs/issues/286

这里的标准模块指的是AMD和CMD的定义

引用玉伯在知乎的详细回答

http://www.zhihu.com/question/20351507/answer/14859415

以下引用玉伯的回复大家会更加深入了解

@lifesinger 昨天折腾得太累了,不好意思。后来还是用 RequireJs 解决问题。
另外,我想问问:
1. AMD 是不是容易卡死UI?
2. 为什么采用与 SeaJs同样采用 CMD 规范编写的 NodeJs 模块 不能直接调用——我大概观察了下,好像定义格式不太一样,这也是问题啊,既然遵循同样的规范为什么格式又不一样,
3. 用常规全局变量写法写的脚本经过 shim 配置,在 var ejs = require(‘ejs‘) 后会覆盖 ejs 的(全局)定义,但是可以直接 require(‘ejs‘),然后 ejs 会注册到window 名下。
4. 把一个常规脚本,换成 SeaJs 标准格式 跟 RequireJs 转换有什么不同吗?
另另外,感觉RequireJS 的自动加载插件机制挺不错。
@iahu
AMD 是一加载就执行,当一次加载很多文件时,意味着会立刻执行大量脚本,这时可能会导致 UI 卡。CMD 的执行是分散的,因此一般来说不会造成 UI 卡。
SeaJS 与 Node.js 的关系,可参考这篇文档:#275
shim 配置后,require(‘ejs‘) 得到的 ejs 就是全局那个 ejs,也可以将挂载在 window 上的 ejs 去掉,比如
seajs.config({
  plugins: ["shim"],
  alias: {
     src: ‘path/to/ejs.js‘,
     exports: function() { var ejs = window.ejs; window.ejs = undefined; return ejs }
  }})
RequireJS 的 shim 插件,本质上和 SeaJS 是一样的。

以上提到的方法已过时了,只好继续尝试其他办法!

方法一:

还是玉伯老大的办法《seajs 2.1.1中去掉了seajs.modify 后,如何preload CDN 中的jquery ?》

https://github.com/seajs/seajs/issues/862

整个文章主要是说不修改为CMD模式下在模块内部使用jquery,玉伯老大是不推介这样,但还是可以实现

不过jquery文件就不是在seajs.config里配置了,是直接在head头部引入文件,就像平时那样,然后在seajs内部某个事件机制触发将全局的jQuery对象带到内部module.exports对象;

seajs.on(‘exec‘, function(module) {
  if (module.uri === seajs.resolve(‘jquery‘)) {
    window.$ = window.jQuery = module.exports;
  }
});

方法二:

当然就是按照CMD定义做封装一次jquery,方法也很简单,只要把源代码粘进去,然后返回jquery对象即可;

define(function(){
    //jquery源代码
    return $.noConflict();
});

这样就可以在seajs.config引入文件在内部其他模块使用,这里返回为什么是$.noConflict(),请看w3c学校介绍

http://www.w3school.com.cn/jquery/core_noconflict.asp
seajs.config({
  base : "../sea-modules/",
  alias : {
    "jquery" : "jquery.js"
  }
});
define(function(require, exports, module){
  var $ = require("jquery");
  exports.showObj = function() {
    console.log($);
  }
});

方法三:

参照seajs官方jquery封装方法

if ( typeof module === "object" && module && typeof module.exports === "object" ) {
    module.exports = jQuery;} else {
    if ( typeof define === "function" && define ) {
        define( "jquery", [], function () { return jQuery; } );
    }}if ( typeof window === "object" && typeof window.document === "object" ) {
    window.jQuery = window.$ = jQuery;}
https://github.com/seajs/examples

在目录 sea-modules/jquery 里就有封装好的1.10版本;

https://github.com/seajs/seajs/issues/264
时间: 2024-12-22 09:56:52

seajs初尝 加载jquery返回null解决学习日志的相关文章

使用SeaJS,require加载Jquery的时候总是为null

这个问题困扰了我两天,使用别人的例子.官网down下来的example都没有问题.但是放到自己项目里就 var $=require("jquery") 为null. 后来发现,jquery本来没有amd规范的,于是从官网上的example下来里面的jquery拿过来直接用,最注意的是,在jquery里面增加了有define这段,里面有一个路径要根据自己实际项目路径进行调整 if ( typeof module === "object" && modu

seajs加载jquery时提示$ is not a function该怎么解决

这篇文章主要介绍了seajs加载jquery时提示$ is not a function该怎么解决的相关资料,需要的朋友可以参考下 jquery1.7以上的都支持模块化加载,只是jquery默认的是支持amd,不支持cmd.所以要用seajs加载jquery时,我们需要稍微做下改动,需要把以下内容做下修改,具体修改方式如下: 把 ? 1 2 3 4 5 if (typeof define === "function" && (define.amd)) {   defin

seajs加载jquery提示$ is not a function

jquery1.7以上的都支持模块化加载,只是jquery默认的是支持amd,不支持cmd.所以要用seajs加载jquery,需要稍微改下jquery 把 1 if (typeof define === "function" && (define.amd)) { 2 define( "jquery", [], function() { 3 return jQuery; 4 }); 5 } 改成 1 if (typeof define === &qu

selenium 加载jquery

1 packagecom.example.tests; 2 3 import staticorg.junit.Assert.*; 4 importjava.util.*; 5 importorg.junit.*; 6 importorg.openqa.selenium.*; 7 importorg.openqa.selenium.ie.InternetExplorerDriver; 8 9 public classSelenium2{ 10 WebDriver driver = newInter

优化加载jQuery的方法

请看下面的一段代码: 1 <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 2 <script type="text/javascript"> 3 window.jQuery || document.write("<script src='__ADMIN_JS__/jquery-2.0.3.

加载jquery插件注意了

1.尽量放在</body>之前,不要放在</head>标签之前,如果执意要放也要放在css之后,例如: <link href="style.css" .../> <script src=jquery.js></script> 2.加载方式使用异步加载,异步加载并不是以下的这种 <script type="text/javascript" src="jquery.js"><

测试加载jquery

点击图片加载jquery.min.js,再点击开始游戏按钮,显示“您好,欢迎来到JQuery世界!”

CDN 加载 jQuery 库的主要优势

使用 CDN 加载 jQuery 库的主要优势是什么 ? (答案) 这是一个稍微高级点儿的jQuery问题.好吧,除了报错节省服务器带宽以及更快的下载速度这许多的好处之外, 最重要的是,如果浏览器已经从同一个CDN下载类相同的 jQuery 版本, 那么它就不会再去下载它一次. 因此今时今日,许多公共的网站都将jQuery用于用户交互和动画, 如果浏览器已经有了下载好的jQuery库,网站就能有非常好的展示机会. 版权声明:本文为博主原创文章,未经博主允许不得转载.

Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正常运行,而java命令有时可以正常运行,有时却不可以,不可以的症状就是显示“找不到或无法加载主类”. 在网上找了各种资料,最终发现是因为代码里含有package语句,所以无法在cmd下运行java命令解释.class文件.而那些可以运行的文件就是因为没有使用package语句. 我这种问题的解决方法