首页 > 解决方案 > Magento 2 JS 库有时无法加载

问题描述

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

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

这也发生在主页和目录页面上的其他 js 库上。有时我们会遇到错误

未捕获的 TypeError: $(...).CustomMenu 不是函数

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

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

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

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

标签: magento2magento-2.0fotorama

解决方案


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

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

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

你现在所拥有的很接近,但它不在垫片内

尝试这个:

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

推荐阅读