Magento2不读我的requirejs-config.js


17

嗨,我是Magento2的新手,试图弄清楚RequireJS在Magento中的工作方式。

这是我的情况:

我有以下模块:

app/code/Mymodule/Test/view/frontend/requirejs-config.js

这是此文件的内容:

var config = {
map: {
    '*': {
        jQuery110: "Mymodule_Test/js/jquery-1.10.2",
        jqueryNoConflict: 'Mymodule_Test/js/jquery.no-conflict',
        flexslider: 'Mymodule_Test/js/jquery.flexslider-min',
        header: 'Mymodule_Test/js/store/header'
    }
}
};

我的主题在这个位置:

app/design/frontend/Mycompany/Basic

我的Javascript位于以下位置:

app/code/Mymodule/Test/view/frontend/web/js/jquery.no-conflict.js
app/code/Mymodule/Test/view/frontend/web/js/jquery.flexslider-min.js
app/code/Mymodule/Test/view/frontend/web/js/store/header.js

在PHTML文件中:

app/code/Mymodule/Test/view/frontend/templates/home.phtml

我添加了以下行:

require(['jqueryNoConflict', 'flexslider'],function($, flexslider){
    (function($) {
        $(window).load(function () {
            $('.flexslider').flexslider();
        });
    })(jQuery);
});

当我在浏览器中检查页面时,出现404错误,并显示以下路径:

http://mag2.com.local/pub/static/frontend/Mycompany/Basic/en_US/flexslider.js

但是,如果我将require []行更改为此:

 require(['Mymodule_Test/js/jquery.no-conflict', 'Mymodule_Test/js/jquery.flexslider-min'],function($, flexslider){
        (function() {
            $(window).load(function () {
                $('.flexslider').flexslider();
            });
        })(jQuery);
    });

文件正在加载。

我还清除了缓存,主题正确,执行了命令:

php bin/magento setup:static-content:deploy

因此,我无法弄清为什么我的requirejs-config.js无法加载。我也遵循文档。

请帮忙


如果要在所有页面上使用与模块无关的自定义js文件怎么办?正确的做法是什么?请不要将我引至Magento官方页面。
Anitr '16

Answers:


27

我发现了问题。

pub / static / _requirejs / frontend / Namespace / Theme / en_US下,删除文件requirejs-config.js

刷新页面,它将重新生成新内容。

如果不起作用,请删除requirejs-config.js并运行以下命令:

php bin/magento cache:clean
php bin/magento cache:flush
php bin/magento setup:upgrade
php bin/magento setup:di:compile

是否可以包含prototype.js?
Slimshadddyyy

谢谢..它为我工作.. :)我+1
Prashant Patil

11

问题是您没有启用开发人员模式。结果,文件缓存在pub/static文件夹中。


7
要启用开发人员模式,您可以在CLI php bin / magento deploy中
Bhupendra Jadeja

6

在部署命令之后,您必须设置开发人员模式并清除缓存。它的工作正常。

php bin/magento deploy:mode:set developer && php bin/magento cache:clean

同时清除浏览器缓存以查看效果。


1

这可能会帮助其他人在使用nginx时遇到非常相似的本地问题。/ static块未正确重写,需要根据此注释添加此内容https://github.com/magento/magento2/issues/7869#issuecomment-268585438

location /static/ {
    if ($MAGE_MODE = "production") {
      expires max;
    }

    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
      rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
      add_header Cache-Control "public";
      add_header X-Frame-Options "SAMEORIGIN";
      expires +1y;

      if (!-f $request_filename) {
        rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
      }
    }

    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
      add_header Cache-Control "no-store";
      add_header X-Frame-Options "SAMEORIGIN";
      expires off;

      if (!-f $request_filename) {
         rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
      }
    }

    if (!-f $request_filename) {
      rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
    }

    add_header X-Frame-Options "SAMEORIGIN";
}


-1

您可以按照以下步骤操作,它将得到解决。

1)将部署模式设置为生产-php magento deploy:mode:set production (js和css的最小化将适用于生产模式。如果您处于开发人员模式且代码已被压缩,则上述问题将按照我的经验出现。如果禁用了最小化,则表示可以保持开发人员模式。还可以在index.php中使用echo print_r($ _ SERVER)确认在加载网站之前正确设置了生产模式或开发人员模式)

2)清除服务器中的所有缓存设置

  • /etc/init.d/nginx重新启动
  • /etc/init.d/php5.6-fpm重新启动
  • /etc/init.d/varnish重新启动

3)清除浏览器缓存并以隐身模式查看。而已!

干杯!


OP没有提到使用Apache还是Nginx。几乎可以肯定地说它是Apache。
克里斯K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.