sea.js jquery not defined

2015-09-11 veryyoung 更多博文 » 博客 » GitHub »

原文链接 http://veryyoung.me/blog/2015/09/11/seajs-preload-lazy.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


用sea.js的preload去加载bootstrap和jquery,会经常出现

$ is not defined

<!-- more -->


大概如下配置的:

seajs.config({
    base: '/static/js/modules/',
    alias: {
    'jquery' : 'jquery.js',
    'bootstrap' : 'bootstrap/js/bootstrap.min.js'
    },
    preload : ['jquery', 'bootstrap'],
    charset : 'utf-8'
})

首先得把所有引用的模块都得打成CMD模块。

用类似如下的代码:

define(['jquery'], function(require, exports, module){

});

包好之后还是会出现以上描述的问题。

原因是因为 bootstrap 也依赖了 jquery 。

而 preload 的加载数组是没有次序依赖的。和 seajs.use(array) 一样。

可以如下配置

// 将 jQuery 暴露到全局
seajs.modify('jquery', function(require, exports) {
  window.jQuery = window.$ = exports
})

或者在每个页面 use js 的时候都 use jquery。

其实也可以在common文件里面

<scrpit src = "../jquery.js" ></scrpit>

参考:

  1. https://github.com/seajs/seajs/issues/286
  2. https://groups.google.com/forum/#!topic/seajs/pYhDVPNt4DI