Requirejs + jQuery失败,但只有在远程服务时才会失败

时间:2012-05-21 11:48:17

标签: javascript jquery requirejs

我的应用程序已经在本地使用Requirejs一段时间没有问题,但是当我把它放在远程服务器上时,我又开始看到Requirejs相关的问题了。

我有一个jQuery包装器脚本,我在其中加载了实际的jquery和一些jQuery插件,例如jquery.cookie。

## boot.js

// Loaded via <script data-main="/boot.js" src="/vendor/requirejs/require.js"></script>
require({
  baseUrl: '/vendor/requirejs/',
  waitSeconds: 5,
  paths: {
    jquery: '/vendor/jquery/dist/jquery',
    jQuery: '/assets/javascripts/jquery-wrapper',
  }
}, [
  'jQuery'
], function($) {
    ...
  });
});

## /assets/javascripts/jquery-wrapper.js

define([
  'order!jquery',
  'order!/vendor/jquery-cookie/jquery.cookie.js'
], function($) {
  // In here I also define some on my own functions on $

  return $;
});

问题是,当我访问远程服务器上的应用程序时,在jquery.cookie脚本被评估时,“jQuery”未定义,这意味着它在加载jQuery之前正在运行。

Uncaught ReferenceError: jQuery is not defined jquery.cookie.js:47
    (anonymous function) jquery.cookie.js:47

我虽然订单!前缀应该防止这样的事情发生?

再次,这在本地工作正常。只有在服务远程服务器时才能解决问题。

如果相关,本地我使用的是Thin服务器。远程我也使用Thin但是在Nginx之后,尽管Nginx只是将所有内容代理为Thin。

没有迹象表明在5秒超时内没有找到文件。该错误立即出现在控制台中。

谁能告诉我哪里出错了?

由于

1 个答案:

答案 0 :(得分:1)

我在使用订单插件加载JQuery的方式上没有看到任何错误,但是如果它在本地而不是远程工作,您可以检查服务器返回的文件的HTTP标头,看看它们是否支持浏览器缓存(Cache-Control,Pragma,Expires,...),因为订单插件仅在浏览器可以缓存javascript文件时才有效。

如果不是这种情况,也许你可以在RequireJS配置上使用优先级加载JQuery,在其他插件之前加载JQuery,或者如果你想要,你也可以将plungis包装在define函数中

define(['JQuery'], function ($) {
    //Paste plugin code here.
});