3

我是 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 (Internal Server Error) require-jquery.js:1854 Uncaught Error: Script error

任何人都可以帮忙吗?

4

2 回答 2

1

您现在一定已经解决了这个问题,但是对于来到这里的其他人来说,问题是您的路径。尝试改用相对路径,我遇到了同样的问题,并且为我解决了这个问题。像这样的东西:

paths: {
    jquery:        '../vendor/jquery/jquery-2.0.3.min',
    pickadate:     '../vendor/pickadate/picker.min',
    pickadatedate: '../vendor/pickadate/picker.date.min'
},
于 2014-05-09T08:51:17.277 回答
1

jquery 已经与 AMD 兼容,因此您不需要 shim。此外,pickadate 不需要依赖 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 来更快地检测到这一点。

于 2013-11-15T10:05:58.643 回答