Javascript 通过RequireJS加载本地jQuery、jQuery UI和其他文件
我开始学习javascript/jQuery,并想使用RequireJS。以下是我的文件层次结构:Javascript 通过RequireJS加载本地jQuery、jQuery UI和其他文件,javascript,jquery,jquery-ui,requirejs,Javascript,Jquery,Jquery Ui,Requirejs,我开始学习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
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 posts(),并将RequireJS配置为如下内容-
在my_project/index.php
中,我有
<script data-main="scripts/loader.js" src="scripts/require.js"></script>
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"],
},
},
});
define(['jquery-ui'], function () {
.... // some js code here
}
在scripts/app/app.js
中,我有
<script data-main="scripts/loader.js" src="scripts/require.js"></script>
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"],
},
},
});
define(['jquery-ui'], function () {
.... // some js code here
}
每当我测试index.php
,我都会看到(在Firebug控制台中)错误:没有定义对加载程序的调用
,错误:没有定义对jquery的调用
和错误:模块的加载超时:jquery ui
。我可以通过将本地jQuery和jQueryUI库替换为基于CDN的库(如上面的注释所示),消除最后两个错误
我想知道如何从本地文件加载jquery和jqueryUI,而不获取错误:没有对jquery的定义调用和错误:模块加载超时:jquery ui
如果这是一篇很长的文章,我很抱歉。正如我上面提到的,我仍在学习javascript,并尽我最大的努力保持我的代码干净。如果任何有经验的程序员能帮我回答上述任何问题,我将非常感谢您的帮助。谢谢。在您的define调用中,您需要为任何加载的JavaScript指定一个名称。您已经填充了jQueryUI,因此不需要在PHP文件中再次定义它
从define语句中删除jqueryui并将其保留为空。如果您有另一个JavaScript文件要加载(比如instance session.js),您会说
define(['app/session'], function (session) {
加载它,然后使用session.which()引用它
下一步-加载jQuery-
您似乎已经重命名了jQuery文件并更改了其命名约定。默认情况下,jQuery将命名为jQuery-1.9.2.min.js或其他名称,但在您的示例中,它位于lib/jQuery/1.9.2/jQuery.min.js下。我建议删除您编辑过的所有jQuery文件并在lib下读取,然后以默认方式设置require.js配置。不要试图重新发明你学习新技术的原因
有关设置信息,请参阅文档
结果表明,我之所以收到这些加载程序错误,是因为我错过了
requirejs(["app/app"]);
在脚本/loader.js
中。这使得所有三个错误都消失了
希望这个问题,当遇到像我这样的requireJS初学者时,能够很容易地解决
另外,请阅读,如果您想直接从上文@kadumel建议的requireJS文档中了解更多信息,请阅读。谢谢@kadumel。看了你给我的文件,我想我已经解决了这个问题。但是我面临着一个新的问题,这里有人问我:如果你有时间,我想让你看看它,帮我找出它导致错误的原因。再次非常感谢!当你得不到答案时,你会得到更好的帮助,然后回来稍微修改一下,回答你自己的问题,仅供参考。如果你对我修改问题感到不安,我很抱歉。在没有得到答案后,我更新了原来的帖子(有三个问题),因为我担心人们会跳过它,因为它太长太多了。你的答案直到我编辑后才发布。我回答我的问题是为了承认我犯了一个错误(不包括requirejs([“app/app”]);
),这是解决上述问题的方法。但是,我也一定要感谢你为我找到了正确的资源。对不起,误会了。希望你继续为帮助他人做出贡献