Magento 2:时刻没有定义



我正在尝试在我的Magento 2网站上使用运输时间JS插件,它需要moment.js和jQuery才能工作,但它不起作用。我收到一个参考错误:第 49 行的发货时间未定义时刻.js如下所示:

try {
if (moment === undefined || $ === undefined ) throw Error("please include jquery & moment.js");
} catch (e) {
console.log(e);
}

====

==========

我的要求.js

这就是我的requirejs-config.js的样子,它位于app/design/frontend/##/##/requirejs-config.js中:

var config = { // eslint-disable-line no-unused-vars
packages: [{
name: 'momentjs',
location: 'js/',
main: 'moment'
}],
map: {
'*': {
'menu': 'Magento_Theme/js/disable-menu',
'shippingtime': 'js/shiptime'
}
},
shim: {
'momentjs': {
deps: ['jquery']
},
'shippingtime': {
deps: ['jquery',',momentjs']
}
}

};

jQuery在其他地方加载并且肯定正在加载(我有各种其他jQuery库都可以工作)。

====

==========

调试

我最初认为.js/发货时间.js文件没有加载,但是当我检查源和网络面板时,它们正在加载。为了进一步测试这一点,我做了以下操作,看看 moment.js 是否会输出任何内容:

require(['momentjs'], function (moment) {
console.log(moment().format('LLLL'));
});

这确实在控制台中输出日期,所以时刻.js肯定正在加载,这是我的发货时间.js文件的代码,该文件不起作用,并给了我上面提到的错误:

require(['jquery', 'shippingtime', 'momentjs'], function (moment) {
jQuery(document).ready(function () {
jQuery(function($) {
jQuery('.shipping-time').shipTime();
});
});
});

任何建议将不胜感激!

自从我与requirejs合作以来已经有一段时间了,但由于还没有更聪明的人插话,我很乐意帮助您继续进行故障排除。将jQueryrequirejs一起使用可能会很棘手,尤其是对于像Magento这样庞大而复杂的平台。

如果无法看到您的所有代码,我会考虑并调查以下内容:

  1. 如有必要,您是否以无冲突的方式正确初始化jQuery
  2. 您使用的是require()还是define()在何处和按预期进行
  3. 您是否精通使用requirejsMagento特有的挑战
  4. 您是否查看并遵循了有关将momentrequirejs结合使用的复杂性的建议

以下是每个方面的一些相应阅读:

  1. 论无冲突
  2. require() vs define() 以及其他很好的见解
  3. 在Magento 2上与RequireJS上
  4. 关于时刻和要求JS的复杂性
    1. https://momentjs.com/docs/#/use-it/require-js/
    2. https://github.com/requirejs/requirejs/issues/1554#issuecomment-226269905

最后要尝试的一件事:

在最后一个代码示例中,您将moment传递给函数,但不传递jQuery。您是否尝试过以下方法:

require(['jquery', 'momentjs', 'shippingtime'], function($, moment) {
$(document).ready(function() {
$('.shipping-time').shipTime();
});
});

最新更新