简体   繁体   English

如何使用Rails默认值和bower指定jQuery版本?

[英]How do I specify jQuery version using Rails defaults and bower?

My rails4 app uses Bower to manage front end dependencies. 我的rails4应用程序使用Bower来管理前端依赖项。 The only js not managed by Bower was jQuery as it was included by Rails by default through the jquery-rails gem. 唯一没有由Bower管理的js是jQuery,因为Rails默认通过jquery-rails gem包含它。

"Suddenly" my dev environment stopped working because after some updates, for some reason, bower locked jquery version to 3.0.0 as stated from bower.json file: “突然”我的开发环境停止工作,因为经过一些更新后,出于某种原因,bower将bquile版本锁定为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

Looking at individual libs bower.json files, none of them set the upper bound for jquery so the last one was downloaded and used. 查看单个libs bower.json文件,它们都没有设置jquery的上限,因此下载并使用了最后一个。 Actually eonasdan-bootstrap-datetimepicker doesn't not work with jquery3 as it uses .size() method. 实际上, eonasdan-bootstrap-datetimepicker不能与jquery3一起使用,因为它使用.size ()方法。 So I wondered I could force the usage of a lower jQuery version. 所以我想知道我可以强制使用较低的jQuery版本。 I ended up removing jquery-rails from gemfile and manually adding jquery (and jquery-ujs) with bower specifying versions: 我最终从gemfile中删除jquery-rails并手动添加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" } } }

obtaining: 获得:

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

Is this an acceptable solution? 这是可接受的解决方案吗? Ideally I would specify the versions in manifest js file but I've never seen that. 理想情况下,我会在清单js文件中指定版本,但我从未见过。 How should I deal with such situation? 我应该如何处理这种情况?

jquery-rails is specific to rails assets and "invisible" to bower, so you have to specify the version you need within bower/bower-rails configuration, to avoid conflict with other assets specified by bower. jquery-rails特定于rails资产并且对于bower是“不可见的”,因此您必须在bower / bower-rails配置中指定所需的版本,以避免与bower指定的其他资产发生冲突。

You can keep jquery-rails as it will not interfere with bower , unless you choose to load it in your view or layout files (you can reference both assets directly managed by rails AND those managed by bower, but this may lead to conflicts). 您可以保留jquery-rails因为它不会干扰bower ,除非您选择在视图或布局文件中加载它(您可以引用由rails直接管理的资产由bower管理的资产,但这可能会导致冲突)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM