我是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 未捕获的错误:脚本错误
有人可以帮忙吗?
答案 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'
},