magento / magento2

Prior to making any Submission(s), you must sign an Adobe Contributor License Agreement, available here at: https://opensource.adobe.com/cla.html. All Submissions you make to Adobe Inc. and its affiliates, assigns and subsidiaries (collectively “Adobe”) are subject to the terms of the Adobe Contributor License Agreement.
http://www.magento.com
Open Software License 3.0
11.59k stars 9.32k forks source link

JS Minification issue & requirejs loading in production mode in 2.4.7 #38829

Closed KrzysztofWisniewskiAcc closed 4 months ago

KrzysztofWisniewskiAcc commented 5 months ago

Preconditions and environment

  1. Magento community/commerce version: 2.4.7
  2. Firefox browser (I was able to reproduce this on other browsers, but in firefox, the issue occurs almost all the time)

Steps to reproduce

1) Install fresh Magento version of 2.4.7 2) Enable js minification (there are few ways to do it, I edit the config.php/env.php file) ...

'system' => [
        'default' => [
            'dev' => [
                'template' => [
                    'minify_html' => '1'
                ],
                'js' => [
                    'merge_files' => '0',
                    'minify_files' => '1',
                    'enable_js_bundling' => '0'
                ],
                'css' => [
                    'minify_files' => '1'
                ],
                'grid' => [
                    'async_indexing' => '1'
                ]
            ],
        ]
    ]

3) Run:

bin/magento setup:upgrade
bin/magento deploy:mode:set production

4) Now go to front and open the console, errors should be there 5) If errors are not there refresh the page few times,

Best is to use Firefox, as the errors there appear almost always. The errors appear rarely in other browsers.

image

The first error: The resource from “http://magento.clean/static/version1718361386/frontend/Magento/luma/en_US/mage/common.js” was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff).

These errors do not occur on magento 2.4.5

I did not test this on magento 2.4.6 so it may be that the issue also occurs there.

Expected result

There are no errors in console. The files are not loaded twice. Only minified files are loaded.

Actual result

There are errors in console. Files are loaded twice .min files & their corresponding 'not minified' are being requested (which fails to load as not minified files, don't exists in pub directory after setup:static-content:deploy) .

image

image

Additional information

I noticed the issue when upgrading from 2.4.4-p8 to 2.4.7 so not quite sure if this started to happen with 2.4.7 release or 2.4.6

Release note

No response

Triage and priority

m2-assistant[bot] commented 5 months ago

Hi @KrzysztofWisniewskiAcc. Thank you for your report. To speed up processing of this issue, make sure that the issue is reproducible on the vanilla Magento instance following Steps to reproduce. To deploy vanilla Magento instance on our environment, Add a comment to the issue:

m2-assistant[bot] commented 5 months ago

Hi @engcom-Delta. Thank you for working on this issue. In order to make sure that issue has enough information and ready for development, please read and check the following instruction: :point_down:

engcom-Delta commented 5 months ago

Hi @KrzysztofWisniewskiAcc ,

Verified the issue on 2.4.7 community and commerce edition and we are not able to reproduce this issue.

Steps to reproduce:-

1.Enable js minification 2.Run bin/magento setup:upgrade bin/magento deploy:mode:set production 3.Go to front and open the console, check errors 4.Refresh the page few times

For magento community

Screenshot 2024-06-18 at 5 28 45 PM Screenshot 2024-06-18 at 5 29 00 PM Screenshot 2024-06-18 at 5 29 23 PM Screenshot 2024-06-18 at 5 29 54 PM Screenshot 2024-06-18 at 5 30 04 PM

For magento commerce

Screenshot 2024-06-18 at 6 05 45 PM Screenshot 2024-06-18 at 6 05 56 PM

Please refer the attached screenshots and let us know if we missed anything.

KrzysztofWisniewskiAcc commented 5 months ago

Hi @KrzysztofWisniewskiAcc ,

Verified the issue on 2.4.7 community and commerce edition and we are not able to reproduce this issue.

Steps to reproduce:-

1.Enable js minification 2.Run bin/magento setup:upgrade bin/magento deploy:mode:set production 3.Go to front and open the console, check errors 4.Refresh the page few times

For magento community

...

I was able to reproduce the issue in the way you described. When I checked 'disable cache' in firefox, after few refreshes I was able to reproduce it. It was more rare to encounter the issue if 'disable cache' was not checked.

image

2 3

engcom-Delta commented 5 months ago

Hi @KrzysztofWisniewskiAcc ,

We Verified the issue on 2.4.7 and 2.4-develop again and we are not able to reproduce this.

Steps to reproduce:-

1.Enable js minification 2.Run bin/magento setup:upgrade bin/magento deploy:mode:set production 3.Go to front and open the console, check errors 4.Disable cache 5.Refresh the page few times

For 2.4.7

Screenshot 2024-06-24 at 7 59 28 PM Screenshot 2024-06-24 at 7 59 28 PM

For 2.4-develop

Screenshot 2024-06-24 at 7 59 34 PM Screenshot 2024-06-24 at 7 59 34 PM
engcom-Bravo commented 4 months ago

Hi @KrzysztofWisniewskiAcc,

We have noticed that this issue has not been updated since long time.
Hence we assume that this issue is fixed now, so we are closing it. Please feel to raise a fresh ticket or reopen this ticket if you need more assistance on this.

Thanks.

KarolLitman commented 4 months ago

We are experiencing the same issues after upgrading from version 2.4.6 to 2.4.7-p1. @KrzysztofWisniewskiAcc, have you managed to resolve this problem?

vandijkstef commented 4 months ago

I have the same issue; and also have the same problem creating a 100% reproducible case. Not sure how exactly; But I think this is happening when caches are expired and/or recompiling on that specific request - possibly enforced by the Cache-Control: no-cache & Pragma: no-cache request headers, with a flair of race-conditions?

Sorry I have nothing decent to add to re-open this ticket.

tstamplis commented 4 months ago

Did anyone find a solution? I have the same problem with 2.4.7-p1 but on mobile view only. In desktop, only minified js files are loaded by the browser. But in mobile view, it tries to load both minified and unminified js files in production mode with minify js turned on.

KrzysztofWisniewskiAcc commented 3 months ago

KarolLitman

We are experiencing the same issues after upgrading from version 2.4.6 to 2.4.7-p1. @KrzysztofWisniewskiAcc, have you managed to resolve this problem?

I was not able to solve the issue,

Not sure on what layer is it lying, is there some kind of external dependency that is pulled and tries to load things different way or was the loading mechanism messed?

tstamplis commented 3 months ago

I was able to resolve it, though I don't know how it resolved it. Normally, I put the site in production mode and let Magento compile and deploy static content. This is how I've always done it. To fix this though, I have to go to production mode, then clear generated, view-preprocessed, deployed version, static content and cache then while in production mode I compile code, force static content deployment and this resolved the issue. Again, I don't know why setting production mode is different than a manual di compile and content deploy, but it makes the difference on my site.

dandrikop commented 2 months ago

My live environment is on Magento 2.4.6-p7 and it does not have the problem mentioned here. However, I have recently upgraded my test environment to Magento 2.4.7-p2 and it has this problem.

The solution of @tstamplis did not work for me. To be honest I don't see why compiling and creating the static files two consecutive times would solve this problem.

praveenpaliya commented 2 months ago

We are also facing this issue. We recently upgraded our Magento cloud instance from 2.4.6-p5 to 2.4.7-p2 and we can see the minify JS are not loading and it is braking the material icons loading and stopping our checkout process as well. What I noticed that, JS files are failed in loading which we have added in app/design/frontend/themename/web/js using requirejs and facing the problem all the JS which are loading through this.

superdav42 commented 2 months ago

We're encountering the same issue as described on our site running 2.4.7-p2. JS is minified but it trieds to load the unminified versions. It doesn't happen every time and seems to happen more often when cache is disabled. It's probably some race condition. Putting breakpoints in requirejs-min-resolver.min.js would help debug the problem but it doesn't happen when the breakpoints are set. This file is responsible for rewritting the url to the minified version so somehow it isn't being executed before the other code. Our site is goodsalt.com. Our build process always manually compiles the static assets before they are deployed. Is there any solution or debug steps we can perform?

drabikowy commented 3 weeks ago

We face exactly the same issue on 2.4.7-p3 image

phes71 commented 3 weeks ago

we have the same issue on 2.4.7-p2. I have disabled minification and merge for .js files and the errors have gone

we need a fix so we can minify js again

domeglic commented 6 days ago

Same here, 2.4.7-p3. It happens randomly but if I refresh any page a few times then one of them will fail.

phes71 commented 6 days ago

Same here, 2.4.7-p3. It happens randomly but if I refresh any page a few times then one of them will fail.

I found changing the .htaccess file in /pub/static by uncommenting

RewriteBase /pub/static/ to

RewriteBase /pub/static/ This initially made the situation worse, but after I redeployed, it worked as expected

domeglic commented 6 days ago

This seems like a race condition bug. Looking into it, the url is generated in lib/web/requirejs/require.js, method nameToUrl.

When minification is enabled, \Magento\Framework\RequireJs\Config::getMinResolverCode class adds a file requirejs-min-resolver.min.js which overrides that method and appends min.js. It's a generated file because it can exclude certain scripts and that is configurable.

Putting breakpoint on it as well as on the require.js (each module is added using head.appendChild(node) ), it didn't always go through the minify resolver.

I guess temporary fixes could be patching the require.js file to contain the minify logic, but not sure how to know if minify is enabled or not. Or adding an apache/nginx rule to append the min.js on 404s.

I am using magepack for bundling but even without it the problem appears although less often.

phes71 commented 6 days ago

domeglic

I found the errors always showed in the console on the Firefox browser, and Chrome was a bit hit-and-miss.

the errors were also more obvious in the admin, but as I said, the errors went away after changing the .htaccess file as I mentioned earlier