我的应用程序已经在本地使用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秒超时内没有找到文件。该错误立即出现在控制台中。
谁能告诉我哪里出错了?
由于
答案 0 :(得分:1)
我在使用订单插件加载JQuery的方式上没有看到任何错误,但是如果它在本地而不是远程工作,您可以检查服务器返回的文件的HTTP标头,看看它们是否支持浏览器缓存(Cache-Control,Pragma,Expires,...),因为订单插件仅在浏览器可以缓存javascript文件时才有效。
如果不是这种情况,也许你可以在RequireJS配置上使用优先级加载JQuery,在其他插件之前加载JQuery,或者如果你想要,你也可以将plungis包装在define函数中
define(['JQuery'], function ($) {
//Paste plugin code here.
});