Как мне указать версию jQuery с использованием Rails по умолчанию и bower?
Мое приложение rails4 использует Bower для управления внешними зависимостями. Единственным js, не управляемым Bower, был jQuery, так как он был включен Rails по умолчанию через гем jquery-rails.
"Внезапно" моя среда разработки перестала работать, потому что после некоторых обновлений по какой-то причине bower заблокировал версию jquery до 3.0.0, как указано в файле bower.json:
masciugo@masciugcbookpro ~/dev/v/hr_dashboard $ r bower:list
I, [2016-06-23T12:58:33.549334 #5308] INFO -- : Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
/Users/masciugo/.nvm/v0.12.4/bin/bower list
bower invalid-meta The "name" is recommended to be lowercase, can contain digits, dots, dashes
bower check-new Checking for new versions of the project dependencies...
bower-rails generated vendor assets /Users/masciugo/dev/v/hr_dashboard/vendor/assets
├─┬ bootstrap#3.3.4 (latest is 4.0.0-alpha.2)
│ └── jquery#3.0.0
├── bootstrap-horizon#0.1.0
├─┬ bootstrap-validator#0.9.0 (latest is 0.10.2)
│ └── jquery#3.0.0
├── classnames#2.2.3 (latest is 2.2.5)
├─┬ eonasdan-bootstrap-datetimepicker#4.17.37
│ ├── jquery#3.0.0
│ ├── moment#2.13.0
│ └─┬ moment-timezone#0.5.4
│ └── moment#2.13.0
├── es6-shim#0.34.4 (latest is 0.35.1)
├── humps#1.0.0 (latest is 1.1.0)
├─┬ jquery-ui#1.10.4 (latest is 1.11.4)
│ └── jquery#3.0.0
├── moment#2.13.0
├── pubsub-js#1.5.3
├─┬ react-bootstrap#0.26.4 (latest is 0.29.5)
│ └── react#0.13.3 (latest is 15.1.0)
├── react-geosuggest#1.9.1 (latest is 1.24.1)
├── spin.js#2.3.2
└── underscore#1.8.3
Глядя на отдельные библиотеки bower.json
файлов, ни один из них не устанавливает верхнюю границу для jquery, поэтому последний был загружен и использован. На самом деле eonasdan-bootstrap-datetimepicker не работает с jquery3, так как использует метод.size(). Поэтому я подумал, что могу заставить использовать более низкую версию jQuery. В итоге я удалил jquery-rails из gemfile и вручную добавил jquery (и jquery-ujs) с указанием версий bower:
{
"lib": {
"name": "bower-rails generated lib assets",
"dependencies": {
// "threex" : "git@github.com:rharriso/threex.git",
// "gsvpano.js" : "https://github.com/rharriso/GSVPano.js/blob/master/src/GSVPano.js"
}
},
"vendor": {
"name": "bower-rails generated vendor assets",
"dependencies": {
"jquery": "<2",
"jquery-ujs": "<2",
"bootstrap": "3.3.4",
"eonasdan-bootstrap-datetimepicker": "4.17.37",
"bootstrap-validator": "0.9.0",
"moment": "2.13.0",
"underscore": "1.8.3",
"react-geosuggest": "1.9.1",
"pubsub-js": "1.5.3",
"spin.js": "2.3.2",
"jquery-ui": "1.10.4",
"es6-shim": "0.34.4",
"classnames": "2.2.3",
"react-bootstrap": "0.26.4",
"humps": "1.0.0",
"bootstrap-horizon": "0.1.0"
}
}
}
получение:
masciugo@masciugcbookpro ~/dev/v/hr_dashboard $ r bower:list
I, [2016-06-27T12:09:29.493630 #21386] INFO -- : Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
/Users/masciugo/.nvm/v0.12.4/bin/bower list
bower invalid-meta The "name" is recommended to be lowercase, can contain digits, dots, dashes
bower check-new Checking for new versions of the project dependencies...
bower-rails generated vendor assets /Users/masciugo/dev/v/hr_dashboard/vendor/assets
├─┬ bootstrap#3.3.4 (latest is 4.0.0-alpha.2)
│ └── jquery#1.12.4 (3.0.0 available)
├── bootstrap-horizon#0.1.0
├─┬ bootstrap-validator#0.9.0 (latest is 0.10.2)
│ └── jquery#1.12.4 (3.0.0 available)
├── classnames#2.2.3 (latest is 2.2.5)
├─┬ eonasdan-bootstrap-datetimepicker#4.17.37
│ ├── jquery#1.12.4 (3.0.0 available)
│ ├── moment#2.13.0
│ └─┬ moment-timezone#0.5.4
│ └── moment#2.13.0
├── es6-shim#0.34.4 (latest is 0.35.1)
├── humps#1.0.0 (latest is 1.1.0)
├── jquery#1.12.4 (latest is 3.0.0)
├─┬ jquery-ui#1.10.4 (latest is 1.11.4)
│ └── jquery#1.12.4 (3.0.0 available)
├─┬ jquery-ujs#1.2.1
│ └── jquery#1.12.4 (3.0.0 available)
├── moment#2.13.0
├── pubsub-js#1.5.3
├─┬ react-bootstrap#0.26.4 (latest is 0.29.5)
│ └── react#0.13.3 (latest is 15.1.0)
├── react-geosuggest#1.9.1 (latest is 1.24.1)
├── spin.js#2.3.2
└── underscore#1.8.3
Это приемлемое решение? В идеале я хотел бы указать версии в манифесте JS-файла, но я никогда не видел этого. Как мне справиться с такой ситуацией?
1 ответ
jquery-rails
Он специфичен для ресурсов rails и "невидим" для bower, поэтому вы должны указать нужную версию в конфигурации bower/bower-rails, чтобы избежать конфликта с другими активами, указанными bower.
Вы можете сохранить jquery-rails
так как это не помешает bower
, если вы не решите загрузить его в свои файлы представлений или макетов (вы можете ссылаться как на активы, непосредственно управляемые рельсами, так и на ресурсы, управляемые bower, но это может привести к конфликтам).