gpt4 book ai didi

javascript - RequireJS 错误地从 URL 加载脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:54 26 4
gpt4 key购买 nike

我正在使用 RequireJS 加载依赖项。这是我的配置的样子:

'use strict';

require.config({
paths: {
jQuery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min',
underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min',
backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min'
}
shim: {
jQuery: {
exports: '$'
},
underscore: {
exports: '_'
},
backbone: {
deps: [
'underscore',
'jQuery'
],
exports: 'Backbone'
}
}
});

当我运行我的静态网站时,在控制台中有这样的消息:

GET http://*myhost*/js/backbone.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: backbone
http://requirejs.org/docs/errors.html#scripterror require.js:166
GET http://*myhost*/js/jQuery.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: jQuery
http://requirejs.org/docs/errors.html#scripterror require.js:166
GET http://*myhost*/js/underscore.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: underscore
http://requirejs.org/docs/errors.html#scripterror require.js:166
Uncaught ReferenceError: jQuery is not defined

如您所见,RequireJS 忽略了我正在为 CND 提供 URL 并尝试在本地查找模块这一事实。

但是,有时 RequireJS 工作正常 - 它从 URL 加载模块。那边的某种彩票。值得一提的是,它只发生在我的远程开发服务器上——也就是当我通过网络访问我的网站时。当我在本地运行我的网站时,RequireJS 总是可以完美地从 CDN 加载模块。奇怪,知道为什么会这样吗?

更新

这就是我启动应用程序的方式:

<script type="text/javascript" data-main="js/main" src="js/require.js"></script>

ma​​in.js(加载配置的地方)

define(['config', 'router'], function(Config, Router) {
var router = new Router();
Backbone.history.start();
});

最佳答案

您的主模块以此开头:

define(['config', 'router'], function(Config, Router) {

这告诉 RequireJS 加载 configrouter 但没有指定加载它们的顺序。如果 router 依赖于使用您在配置中列出的 CDN 的模块,并且假设 config 不在 router 的依赖项中,那么你确实会间歇性地加载失败。当 config 恰好在 router 之前加载时,一切都很好。如果 configrouter 之后加载,那么一切都会崩溃。解决此问题的最简单方法是将配置移动到 main.js 文件中。您可以在 define 调用之前调用 require.config,显然您不会再在依赖项中列出 config

如果将调用移动到 require.config 对您不起作用,因为(例如)您需要在多个页面之间共享 config 那么这也可以解决问题:

define(['config'], function () {
require(['router'], function(Router) {
var router = new Router();
Backbone.history.start();
});
});

上面的代码确保 config 在其他任何事情之前被加载。

你的配置也有以下错误:

  1. 您必须始终将 jQuery 称为 jquery,因为 jQuery(无论好坏)将其模块名称硬编码为 jquery 所有小写字母。我使用 jQuery 而不是 jquery 运行测试并得到不稳定的结果。

  2. jQuery 2.0.3 不需要 shim。为它使用垫片只会混淆 RequireJS。

关于javascript - RequireJS 错误地从 URL 加载脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com