当我尝试通过 requirejs 包含 js 库时出错
Erros when i tried to include js libraries via requirejs
我尝试包含一些 js 库,例如 bootstrap、jQuery.ui 等...通过 requirejs方法但是,我遇到了一些错误
这是控制台错误:
Error: Script error for: jquery/jquery-storageapi
http://requirejs.org/docs/errors.html#scripterror
Error: Load timeout for modules: jquery.bootstrap
http://requirejs.org/docs/errors.html#timeout
Error: Script error for: jquery.bootstrap
Nb: 对于 Error: Script error for: jquery/jquery-storageapi
错误请参考第 require.js:166:17
行,第 166 行是:
/**
* Constructs an error with a pointer to an URL with more information.
* @param {String} id the error ID that maps to an ID on a web page.
* @param {String} message human readable error.
* @param {Error} [err] the original error, if there is one.
*
* @returns {Error}
*/
function makeError(id, msg, err, requireModules) {
var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
e.requireType = id;
e.requireModules = requireModules;
if (err) {
e.originalError = err;
}
return e;
}
if (typeof define !== 'undefined') {
//If a define is already in play via another AMD loader,
//do not overwrite.
return;
}
if (typeof requirejs !== 'undefined') {
if (isFunction(requirejs)) {
//Do not overwrite and existing requirejs instance.
return;
}
cfg = requirejs;
requirejs = undefined;
}
我的 requirejs-config.js :
var config = {
paths: {
"jquery.bootstrap": "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min",
"jquery.3": "https://code.jquery.com/jquery-3.3.1.min",
"jquery.ui": "https://code.jquery.com/ui/1.12.1/jquery-ui.min"
},
shim: {
'jquery.bootstrap': {
'deps': ['jquery']
},
'jquery.3': {
'deps': ['jquery']
},
'jquery.ui': {
'deps': ['jquery']
}
}
};
然后我这样调用我的函数 exemple :
<script type="text/javascript">
requirejs(['jquery', 'jquery.3'], function (jQuery, jQuery3) {
jQuery(function ($) {
$('.js-toggle-menu').click(function(e){
e.preventDefault();
$('.mobile-header-nav').slideToggle();
$(this).toggleClass('open');
});
});
});
</script>
Screenshot
感谢您的帮助。
您的配置没有任何意义,实际上它不应该工作。在 paths
你有这个关联
"jquery.3": "https://code.jquery.com/jquery-3.3.1.min",
然后在您的 shim
中您有:
'jquery.3': {
'deps': ['jquery']
},
这完全没有意义。您从 https://code.jquery.com/jquery-3.3.1.min
获得的文件是 jQuery,但您正在设置一个 shim
,表示 jQuery 依赖于.. .jQuery。什么??
至少,您需要解决该问题,并使用如下内容:
var config = {
paths: {
"jquery.bootstrap": "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min",
"jquery": "https://code.jquery.com/jquery-3.3.1.min",
"jquery.ui": "https://code.jquery.com/ui/1.12.1/jquery-ui.min"
},
shim: {
'jquery.ui': {
'deps': ['jquery']
}
}
};
除了修复 jQuery 的配置外,我还删除了 Bootstrap 的 shim
。 Bootstrap 3 需要 shim
。 Bootstrap 4 检测是否存在 AMD 加载程序并调用 define
将自身注册为正确的模块。
请注意,您还需要下载 popper
and make it available to RequireJS so that Bootstrap can work because Bootstrap 4 lists it among its dependencies. If you run into issues getting popper
to work, please search this site because it's been discussed 相当多的内容。
我也会将 Boostrap 称为 bootstrap
而不是 jquery.bootstrap
,但这是一个偏好问题。
我尝试包含一些 js 库,例如 bootstrap、jQuery.ui 等...通过 requirejs方法但是,我遇到了一些错误
这是控制台错误:
Error: Script error for: jquery/jquery-storageapi http://requirejs.org/docs/errors.html#scripterror Error: Load timeout for modules: jquery.bootstrap http://requirejs.org/docs/errors.html#timeout Error: Script error for: jquery.bootstrap
Nb: 对于 Error: Script error for: jquery/jquery-storageapi
错误请参考第 require.js:166:17
行,第 166 行是:
/**
* Constructs an error with a pointer to an URL with more information.
* @param {String} id the error ID that maps to an ID on a web page.
* @param {String} message human readable error.
* @param {Error} [err] the original error, if there is one.
*
* @returns {Error}
*/
function makeError(id, msg, err, requireModules) {
var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
e.requireType = id;
e.requireModules = requireModules;
if (err) {
e.originalError = err;
}
return e;
}
if (typeof define !== 'undefined') {
//If a define is already in play via another AMD loader,
//do not overwrite.
return;
}
if (typeof requirejs !== 'undefined') {
if (isFunction(requirejs)) {
//Do not overwrite and existing requirejs instance.
return;
}
cfg = requirejs;
requirejs = undefined;
}
我的 requirejs-config.js :
var config = {
paths: {
"jquery.bootstrap": "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min",
"jquery.3": "https://code.jquery.com/jquery-3.3.1.min",
"jquery.ui": "https://code.jquery.com/ui/1.12.1/jquery-ui.min"
},
shim: {
'jquery.bootstrap': {
'deps': ['jquery']
},
'jquery.3': {
'deps': ['jquery']
},
'jquery.ui': {
'deps': ['jquery']
}
}
};
然后我这样调用我的函数 exemple :
<script type="text/javascript">
requirejs(['jquery', 'jquery.3'], function (jQuery, jQuery3) {
jQuery(function ($) {
$('.js-toggle-menu').click(function(e){
e.preventDefault();
$('.mobile-header-nav').slideToggle();
$(this).toggleClass('open');
});
});
});
</script>
Screenshot
感谢您的帮助。
您的配置没有任何意义,实际上它不应该工作。在 paths
你有这个关联
"jquery.3": "https://code.jquery.com/jquery-3.3.1.min",
然后在您的 shim
中您有:
'jquery.3': {
'deps': ['jquery']
},
这完全没有意义。您从 https://code.jquery.com/jquery-3.3.1.min
获得的文件是 jQuery,但您正在设置一个 shim
,表示 jQuery 依赖于.. .jQuery。什么??
至少,您需要解决该问题,并使用如下内容:
var config = {
paths: {
"jquery.bootstrap": "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min",
"jquery": "https://code.jquery.com/jquery-3.3.1.min",
"jquery.ui": "https://code.jquery.com/ui/1.12.1/jquery-ui.min"
},
shim: {
'jquery.ui': {
'deps': ['jquery']
}
}
};
除了修复 jQuery 的配置外,我还删除了 Bootstrap 的 shim
。 Bootstrap 3 需要 shim
。 Bootstrap 4 检测是否存在 AMD 加载程序并调用 define
将自身注册为正确的模块。
请注意,您还需要下载 popper
and make it available to RequireJS so that Bootstrap can work because Bootstrap 4 lists it among its dependencies. If you run into issues getting popper
to work, please search this site because it's been discussed 相当多的内容。
我也会将 Boostrap 称为 bootstrap
而不是 jquery.bootstrap
,但这是一个偏好问题。