#javascript #jquery #ruby-on-rails
Вопрос:
Я пытаюсь отладить плагин jquery в Ruby on Rails, для которого требуется jquery.
Я установил jquery через yarn и требую его в application.js… но поиск по отладке заставил меня поверить, что я загружал jquery несколько раз, и действительно — ДАЖЕ если я удалю оператор «требуется…» из application.js, $().jquery по-прежнему приводит к 1.6. при вводе его в консоль…
Я искал везде и просто не могу понять, откуда берется jquery, так есть ли (окончательный и конечный) список мест, из которых он может быть загружен?
РЕДАКТИРОВАТЬ: Я сделал список пряжи ПОСЛЕ удаления jquery с помощью yarn remove jquery (и действительно, его все еще нет в package.json), НО он все еще указан (и подпапка для jquery все еще находится в node_modules). У меня все еще есть код инициализации jquery config/webpack/environment.js, и ТОЛЬКО когда я удаляю этот код, jquery больше нет. Так что в двух словах это кажется:
- jQuery является частью модулей узлов, хотя я удалил его с помощью yarn remove (?)
- jquery может быть инициализирован таким образом в environment.js
- jquery не обязательно требуется в application.js
Я должен сказать, что это выше моего понимания…. любая помощь ценится. Единственное, что я пытаюсь решить, это: я импортирую плагин jquery под названием easy-автозаполнение (работает как шарм), а затем я также пытаюсь импортировать selectize, но получаю сообщение об ошибке «selectize() не определен»…
Содержание environment.js:
const { environment } = require("@rails/webpacker"); const webpack = require("webpack"); environment.plugins.prepend( "Provide", new webpack.ProvidePlugin({ $: "jquery/src/jquery", jQuery: "jquery/src/jquery", }) ); module.exports = environment;
ИЗМЕНИТЬ: package.json после удаления jquery:
{ "name": "myapp", "private": true, "dependencies": { "@rails/actioncable": "^6.0.0", "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.0", "@rails/webpacker": "5.4.3", "easy-autocomplete": "^1.3.5", "selectize": "^0.12.6", "turbolinks": "^5.2.0", "webpack": "^4.46.0", "webpack-cli": "^3.3.12" }, "version": "0.1.0", "devDependencies": { "webpack-dev-server": "^3" } }
Gemfile (комментарии удалены):
source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '3.0.0' gem 'rails', '~gt; 6.1.4', 'gt;= 6.1.4.1' gem 'mysql2', '~gt; 0.5' gem 'puma', '~gt; 5.0' gem 'sass-rails', 'gt;= 6' gem 'webpacker', '~gt; 5.0' gem 'turbolinks', '~gt; 5' gem 'jbuilder', '~gt; 2.7' # gem 'redis', '~gt; 4.0' # gem 'bcrypt', '~gt; 3.1.7' gem 'image_processing', '~gt; 1.2' gem 'bootsnap', 'gt;= 1.4.4', require: false gem 'pagy' gem 'ransack' gem 'nokogiri' gem 'open-uri' group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'web-console', 'gt;= 4.1.0' gem 'rack-mini-profiler', '~gt; 2.0' gem 'listen', '~gt; 3.3' gem 'spring' gem 'htmlbeautifier' gem 'solargraph' gem 'rubocop' end group :test do gem 'capybara', 'gt;= 3.26' gem 'selenium-webdriver' gem 'webdrivers' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
.
Комментарии:
1. Вы используете звездочки или веб-пакет? Я считаю, что Webpack теперь используется по умолчанию. Кроме того, какая версия rails?
2. Ах, извините, забыл. Да, webpack и Rails 6.1.4.1
3. На самом деле это будет либо файл Gemfile, либо пакет.json afaik. Возможно , jquery, который вы видите, исходит из расширения в вашем браузере или что-то в этом роде, я бы проверил в режиме инкогнито, чтобы убедиться, что вы испытываете то же самое.
4. Это в пакете.json, но я не включил его в свой application.js… так как же он будет загружен? Вот что меня озадачивает…
5. Хорошо ли удаление его из пакета.json устраняет проблему? Возможно, Rails делает там какую-то «магию» и включает ее автоматически. Эти разработчики любят магию.