Rails 5.2: проблема с jquery-rails

Я разрабатываю приложение 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 кое-что изменил за кулисами, и как я могу это исправить?

Вот несколько вещей, которые я пробовал:

  1. Используйте ресурсы из папки public стандартным способом: [Прекрасно работает]

  2. Используйте другую версию jquery, например jquery, jquery2, jquery3: [не работает]

В настоящее время я использую метод 1, описанный выше, как текущий обходной путь, но мой проект не организован таким образом.

заранее спасибо

Не могли бы вы попробовать еще раз после изменения имени переменной w на любое собственное?

Vishal 12.07.2018 07:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
955
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После нескольких дней разочарований я обнаружил главную проблему.

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)

Другие вопросы по теме