RequireJS用于jQuery插件的填充路径

时间:2013-11-14 21:12:52

标签: javascript jquery requirejs amd

我是RequireJS的新手,我正在尝试使用shim技术加载插件。理想情况下,我也希望将插件保存在不同的目录中。

无论我做什么,我都会收到一个脚本错误(即使插件位于基本目录中。)这是我的RequireJS配置。 picker.date.min需要picker.min

require.config({
    baseUrl: '/js',
    paths: {
        jquery:        'vendor/jquery/jquery-2.0.3.min',
        pickadate:     'vendor/pickadate/picker.min',
        pickadatedate: 'vendor/pickadate/picker.date.min'
    },
    shim: {
        jquery: {
            exports: '$'
        },
        pickadate:     ['jquery'],
        pickadatedate: ['jquery', 'pickadate']
    }
});

这是我在页面上使用的脚本

require(['jquery', 'pickadate', 'pickadatedate'], function($) {

    $('#start_date').pickadate();

});

我得到的错误是: GET http://domain.com/js/pickadate.js 500(内部服务器错误)require-jquery.js:1854 未捕获的错误:脚本错误

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

jquery已经与AMD兼容,所以你不需要垫片。另外,pickadatedate不需要依赖于jquery,因为它已经被依赖于pickadate暗示了。你的垫片可以简化为:

shim: {
    pickadate:     ['jquery'],
    pickadatedate: ['pickadate']
}

然而,这种改变并不能解决您的问题。您提到的错误实际上通常不是由丢失的脚本引起的。如果requirejs无法找到该脚本,那么您还会在控制台中看到404 GET请求(在Chrome中使用Ctrl + Shift + I)。如果您没有看到404 GET,则可能不会发现丢失脚本。

您提到的错误通常意味着一个或多个脚本存在某种语法错误,无法通过JavaScript解释器加载。也就是说,requirejs确实找到了脚本,但是当它尝试加载它时,由于编译或运行时问题而失败。

查找罪魁祸首脚本的最​​佳方法是启动开发工具,例如Chrome中提供的工具,并查看异常和在异常中设置的值及其周围的任何变量。如果您没有看到它,请打开Break on Errors(参见JavaScript: Is there a way to get Chrome to break on all errors?)。一旦发生错误,这将导致Chrome调试程序中断。如果错误不是脚本错误,则继续,直到您停止在上面的错误。

通常当我遇到上述错误时,我只看一下我输入的最后一个代码,我通常会发现一些语法错误(顺便说一下,我强烈推荐"use strict";和jslint来更快地检测它。

答案 1 :(得分:1)

你现在必须解决这个问题,但对于那些来到这里的人来说,问题就在于你的道路。尝试使用相对路径,我有同样的问题,并为我修复它。像这样:

paths: {
    jquery:        '../vendor/jquery/jquery-2.0.3.min',
    pickadate:     '../vendor/pickadate/picker.min',
    pickadatedate: '../vendor/pickadate/picker.date.min'
},