Я разрабатываю приложение Rails 5.2, и в режиме разработки все работает нормально. Основное внимание уделяется манифесту javascript.
app/assets/javacripts/application.js
//= require rails-ujs
//= require jquery3
//= require activestorage
//= require turbolinks
//= require_tree .
И jquery-rails уже включен: gem 'jquery-rails'
Jquery из манифеста отлично работает во время разработки, но когда я развертываю в производственной среде с RAILS_ENV=production, консоль отладки выдает мне ошибку.
Uncaught TypeError: wt.each is not a function
at application-f391c00e32925e724aeeeafb89a9def5fe54c457b371cab55c13d97dc54382cd.js:formatted:789
at application-f391c00e32925e724aeeeafb89a9def5fe54c457b371cab55c13d97dc54382cd.js:formatted:9
at application-f391c00e32925e724aeeeafb89a9def5fe54c457b371cab55c13d97dc54382cd.js:formatted:10
Иногда его называют xt:
Uncaught TypeError: xt.each is not a function
at application-01f2edddc7a85d2c9e116d47f0c8eb10e41b5d6a06d8832122e5545bb2d1068f.js:formatted:1340
at application-01f2edddc7a85d2c9e116d47f0c8eb10e41b5d6a06d8832122e5545bb2d1068f.js:formatted:559
at application-01f2edddc7a85d2c9e116d47f0c8eb10e41b5d6a06d8832122e5545bb2d1068f.js:formatted:560
и ошибка приводит к этой строке кода:
wt.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(t, e) {
ht["[object " + e + "]"] = e.toLowerCase()
});
Но когда я проверил исходный код JQuery, это был не wt (или иногда xt), а w:
w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" ")
// The code goes on
Я подозреваю, что Rails кое-что изменил за кулисами, и как я могу это исправить?
Вот несколько вещей, которые я пробовал:
Используйте ресурсы из папки public стандартным способом: [Прекрасно работает]
Используйте другую версию jquery, например jquery, jquery2, jquery3: [не работает]
В настоящее время я использую метод 1, описанный выше, как текущий обходной путь, но мой проект не организован таким образом.
заранее спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


После нескольких дней разочарований я обнаружил главную проблему.
uglifier
Удаление / комментирование uglifier из инициализатора моего производства, похоже, работает. Несмотря на то, что несжатые активы не являются гигиеническими, они все же работают.
Похоже, Uglifier внес некоторые изменения за сценой (что меняет имя переменной) вместе со сжатием. Установка опции mangle: false у меня не вышла даже с harmony: true по неизвестной причине.
Ознакомьтесь с документацией, чтобы узнать, есть ли какой-либо вариант, который может подойти для ваших конкретных нужд.
https://github.com/lautis/uglifier
Вы можете настроить uglifier в app/assets/production.rb следующим образом:
config.assets.js_compressor = Uglifier.new(harmony: true, mangle: false)
У меня это не сработало, поэтому я просто закомментировал эту конкретную строку, пока не смог понять, как ее обойти.
# Didn't work, commenting out
#
# config.assets.js_compressor = Uglifier.new(harmony: true, mangle: false)
Не могли бы вы попробовать еще раз после изменения имени переменной
wна любое собственное?