首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保Magento2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题。

问如何确保Magento2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题。
EN

Stack Overflow用户
提问于 2018-09-15 22:52:53
回答 2查看 1.5K关注 0票数 1

我正在尝试加载一个需要jQuery才能运行的延迟加载程序插件。如果我这样写我的脚本:

代码语言:javascript
复制
require([
        "jquery",
        "ScandiLazy",
    ], function ($) {
        jQuery('.category-products .lazy').lazy();
    });

我得到了:

代码语言:javascript
复制
"jquery.lazy.min.js:43 Uncaught TypeError: Cannot read property 'fn' of undefined",

然后是:

代码语言:javascript
复制
Uncaught TypeError: jQuery(...).lazy is not a function

这是一个错误,因为没有加载jQuery。

但如果我嵌套了要求:

代码语言:javascript
复制
 require([ "jquery"], function ($) {
        require([ "ScandiLazy"], function ($) {
            jQuery('.category-products .lazy').lazy();
        });
    });

然后它就完美地工作了。

但是为了让它工作而嵌套请求是错误的,这实际上是一种正确的方式吗?

如果这是不正确的,那么有什么方法可以确保在加载ScandiLazy延迟加载插件之前已经加载了jQuery?

EN

回答 2

Stack Overflow用户

发布于 2018-09-18 03:43:33

ScandiLazy需要jQuery才能工作,所以您必须告诉RequireJS使用shim将jQuery设置为ScandiLazy的依赖项(这里更多的是https://requirejs.org/docs/api.html#config-shim)。快速示例如何解决此问题:

代码语言:javascript
复制
requirejs.config({ // configure RequireJS first
    shim: {
        'path/to/ScandiLazy': ['jquery']
    }
});

require([ // load modules
    "jquery",
    "ScandiLazy",
], function ($) {
    jQuery('.category-products .lazy').lazy();
});
票数 1
EN

Stack Overflow用户

发布于 2019-09-13 03:08:19

我认为在M2中正确的方法是将其添加到模块/主题的requirejs-config.js中

代码语言:javascript
复制
var config = {
    shim: {
        'ScandiLazy': ['jQuery']
    },
    map: {
        ...
    },
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52345840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档