【问题标题】:Magento 2: moment is not definedMagento 2:时刻未定义
【发布时间】:2019-12-03 10:22:06
【问题描述】:

我正在尝试在我的 Magento 2 网站上使用 Shipping Time JS 插件,它需要 moment.js 和 jQuery 才能工作,但它不起作用。我在第 49 行的 shiptime.js 中收到 ReferenceError: moment is not defined,如下所示:

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

==============

我的 require.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 库都在工作)。

==============

调试

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

require(['momentjs'], function (moment) {

        console.log(moment().format('LLLL'));
    });

这确实会在控制台中输出日期,所以 moment.js 肯定正在加载,这是我的 shiptime.js 文件的代码,它不工作并给了我上面提到的错误:

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

任何建议将不胜感激!

【问题讨论】:

  • 看起来您的require.js 的line 18 上可能有一个额外的,? deps:['jquery',',momentjs']
  • @dusthaines 好收获!我删除了多余的逗号,但不幸的是它仍然给我错误。

标签: javascript requirejs momentjs magento2


【解决方案1】:

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

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

  1. 如果需要,您是否以无冲突的方式正确初始化 jQuery
  2. 您在哪里使用require() 还是使用define()?
  3. 在使用requirejs 时,您是否熟悉Magento 独有的挑战?
  4. 您是否查看并遵循了有关使用 moment 和 requirejs 的复杂性的建议

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

  1. On No-Conflict
  2. require() vs define() plus other good insights
  3. On Magento 2 with RequireJS
  4. 关于 Moment 和 RequireJS 的复杂性
    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();
  });
});

【讨论】:

  • 感谢链接,我花了几个小时重写了所有链接,我想我一定错过了一些东西,因为它现在按预期工作。再次感谢您的回复! :)
猜你喜欢
  • 2016-01-05
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2016-05-31
相关资源
最近更新 更多