Javascript 通过RequireJS加载本地jQuery、jQuery UI和其他文件

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

我开始学习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 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”]);
),这是解决上述问题的方法。但是,我也一定要感谢你为我找到了正确的资源。对不起,误会了。希望你继续为帮助他人做出贡献