1

我的应用程序在本地使用 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 但在 Nginx 之后,尽管 Nginx 只是将所有东西都代理给 Thin。

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

谁能告诉我哪里出错了?

谢谢

4

1 回答 1

1

我看不出您使用 order 插件加载 JQuery 的方式有什么问题,但是如果它在本地而不是远程工作,您可以检查服务器返回的文件的 HTTP 标头,并查看它们是否支持浏览器缓存( Cache-Control, Pragma, Expires, ...),因为 order 插件仅在 javascript 文件可被浏览器缓存时才有效。

If this is not the case, maybe you can load JQuery using priority on your RequireJS configuration, to load JQuery before the other plugins, or if you want, you can also wrap the plungis in define functions

define(['JQuery'], function ($) {
    //Paste plugin code here.
});
于 2012-05-21T14:12:23.590 回答