我开始学习 javascript/jQuery 并想使用 RequireJS。以下是我的文件层次结构:
my_project/
├── index.php
└── scripts/
├── require.js
├── loader.js
├── app/
│ ├── app.js // this is where I'd like to write functions for the app
│ └── helper/ // this folder is empty for now
└── lib/
├── jquery/
│ └── 1.10.2/
│ └── jquery.min.js
└── jqueryui/
└── 1.10.3/
└── jquery-ui.min.js
我通读了与此相关的 RequireJS 文档和 StackOverflow 帖子 (example),并将 RequireJS 配置设置为如下所示 -
在 my_project/index.php
中,我有
<script data-main="scripts/loader.js" src="scripts/require.js"></script>
在 scripts/loader.js
中,我有
requirejs.config({
baseUrl: 'scripts/lib',
enforceDefine: true,
paths: {
"app": '../app', // mapping for my 'scripts/app/' directory
"jquery": [
'jquery/1.10.2/jquery.min',
//'//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', this works
],
"jquery-ui": [
'jqueryui/1.10.3/jquery-ui.min',
//'//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min', this works
],
},
shim: {
"jquery-ui": {
exports: "$",
deps: ["jquery"],
},
},
});
在 scripts/app/app.js
中,我有
define(['jquery-ui'], function () {
.... // some js code here
}
每当我测试 index.php
时,我都会看到(在 Firebug 控制台中)Error: No define call for loader
, Error: No define call for jquery
和 错误:加载模块超时:jquery-ui
。我可以通过将本地 jQuery 和 jQueryUI 库替换为基于 CDN 的库(如 Google 的库)来消除最后两个错误(在上面显示为注释)。
我想知道如何从本地文件加载 jquery 和 jqueryUI 而不会出现 Error: No define call for jquery
和 Error: Load timeout for modules: jquery-ui
.
如果这篇文章很长,我很抱歉。正如我上面提到的,我仍在学习 javascript 并尽我最大的努力保持我的代码干净。如果任何有经验的编码人员可以帮助我回答上述任何问题,我将不胜感激。谢谢。
最佳答案
在您的定义调用中,您需要为任何已加载的 JavaScript 命名。您已经填充了 jQueryUI,因此您不需要在 PHP 文件中再次定义它。
从您的定义语句中删除 jquery-ui 并将其留空。如果您有另一个要加载的 JavaScript 文件(例如 session.js),您会说
define(['app/session'], function (session) {
加载它然后使用 session.whatever() 来引用它。
下一步-加载jQuery-
您似乎重命名了 jQuery 文件并更改了其命名约定。默认情况下,jQuery 将被命名为 jQuery-1.9.2.min.js 或其他名称,但在您的示例中,它位于 lib/jQuery/1.9.2/jQuery.min.js 下。我建议删除所有你编辑过的 jQuery 文件并在 lib 下读取它,然后将你的 require.js 配置设置为默认方式。学习新技术时,不要试图重新发明轮子!
有关设置信息,请参阅文档
关于javascript - 通过RequireJS加载本地jQuery、jQuery UI等文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635311/