【问题标题】:Magento 2 JS libraries sometimes don't loadMagento 2 JS 库有时无法加载
【发布时间】:2019-06-04 11:34:31
【问题描述】:

我们目前正在运行一个 Magento 2.2.6 实例。有时产品库会因 JS 错误而中断:

未捕获的类型错误:settings.$elementF.fotorama 不是函数

主页和目录页面上的其他 js 库也会出现这种情况。有时我们会出错

未捕获的类型错误:$(...).CustomMenu 不是函数

如果您硬刷新/清除浏览器缓存,它会正常工作,并且该页面的所有错误都会消失,但如果您浏览该网站,它会在访问几个页面后再次抛出错误。

我已经尝试重新部署静态资产、打开和关闭静态签名、禁用所有扩展、禁用所有后端缓存并将我的 requirejs-config.js 文件更改为依赖和填充 jquery

var config = {
    deps: ['jquery'],
    map: {
        '*' : {
            'hello' : 'js/custom'
        }
    },
    'fotorama/fotorama': {
        deps: ['jquery']
    }
}

此问题之前已多次发布,任何建议将不胜感激。

【问题讨论】:

  • 您找到解决方案了吗?我也面临像你这样的类似问题

标签: magento2 magento-2.0 fotorama


【解决方案1】:

不幸的是,依赖数组不能保证按顺序加载。

您可以在 requireJS 中使用 shim,它可以让您定义库之间的依赖关系并导出可与其他库一起使用的全局变量。

基本上在shim 中,您可以使用deps 属性来定义在使用包含的库之前应该加载的库。

您现在拥有的东西很接近,但它不在垫片内

试试这个:

var config = {
    deps: ['jquery'],
    map: {
        '*' : {
            'hello' : 'js/custom'
        }
    },
    shim: {
        // export the variable 
        jquery: {
            exports: '$'
        },
        // fotorama depends on jquery
        'fotorama/fotorama': {
            deps: ['jquery']
        }
    }
}

【讨论】:

  • 尝试将其放入您的自定义主题 Magento_Theme/frontend/layout/default_head_blocks.xml - <remove src="jquery.js" />。 RequireJS 应该处理 jquery,您的主题可能会在其他地方调用它。让我知道它是否有效
猜你喜欢
  • 2017-03-15
  • 2021-04-18
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2012-01-13
  • 2015-09-22
相关资源
最近更新 更多