【问题标题】:how to effectively organize vendor css and js files togheter in rails assets如何在 Rails 资产中有效地组织供应商 css 和 js 文件
【发布时间】:2014-06-11 21:40:15
【问题描述】:

(我是 Rails 和 SO 的新手,如果我做得不对,请原谅)

我正在尝试在我的 rails 4 应用程序中调整常规的第三方 Web 模板。我有一个 vendor 文件夹,其中包含 bootstrap.jsNivo-sliderIsotope 等其他文件和子文件夹.css 和 .js 文件。

所以我将所有文件和子文件夹移动到vendor/assets 并在我的application.js 中包含//= require_tree ../../../vendor/assets/,正如推荐的here。所以我的 application.js 看起来像

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require turbolinks
//= require_tree ../../../vendor/assets/
//= require_tree .

在我的 layout 文件中:

<%=stylesheet_link_tag "application.css" -%>
<%=javascript_include_tag "application" -%> 

当我在我的服务器上执行它时,我得到 Sprockets::FileOutsidePaths 异常:

Showing /home/valle/RoR/grifo/app/views/layouts/application.html.erb where line #25 raised: /home/valle/RoR/grifo/vendor/assets/bootstrap.js isn't in paths: /home/valle/RoR/grifo/app/assets/images, /home/valle/RoR/grifo/app/assets/javascripts, /home/valle/RoR/grifo/app/assets/stylesheets, /home/valle/RoR/grifo/lib/assets/circle-flip-slideshow, /home/valle/RoR/grifo/lib/assets/isotope, /home/valle/RoR/grifo/lib/assets/javascripts, /home/valle/RoR/grifo/lib/assets/jflickrfeed, /home/valle/RoR/grifo/lib/assets/magnific-popup, /home/valle/RoR/grifo/lib/assets/mediaelement, /home/valle/RoR/grifo/lib/assets/nivo-slider, /home/valle/RoR/grifo/lib/assets/owl-carousel, /home/valle/RoR/grifo/lib/assets/rs-plugin, /home/valle/RoR/grifo/lib/assets/stylesheets, /home/valle/RoR/grifo/lib/assets/twitterjs, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/modernizr-rails-2.7.1/vendor/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/turbolinks-2.2.2/lib/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/jquery-rails-3.1.0/vendor/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/coffee-rails-4.0.1/lib/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/fonts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/images, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/stylesheets, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/vendor/assets/stylesheets

我以为 Sprockets 会获取所有资产文件夹中的所有 js 或 css 文件,预编译、统一和缩小它们,但现在看来我需要指定路径。我该如何解决? 另外,vendor里面的javascript和css文件夹不分开是不是有问题?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    rails 4 中,他们已经删除了vendor 文件夹,因此,资产将不会从供应商处服务器。

    Rails.application.config.assets.paths不包含vendor,如果你想你必须添加路径

    在 config/application.rb 中

    config.assets.paths << "#{Rails.root}/vendor/assets"
    

    【讨论】:

    • 感谢您的回答,抱歉回复晚了。它似乎像一个魅力。尽管如此,供应商文件夹确实存在(至少在 rails 4.1.0 中),我不明白为什么它会从 Rails.application.config.assets.paths 中删除。我不应该使用vendor/folders 吗?那么使用我的第三方文件的正确替代方法是什么?
    • 由于版本 4 供应商和 lib 目录默认不包含在资产管道中。如果您愿意,则应扩展资产路径或使用 app/assets 文件夹。如果我的回答有帮助,请接受我的回答.
    【解决方案2】:

    application.js 文件更新为

    //= require jquery
    //= require jquery_ujs
    //= require twitter/bootstrap
    //= require turbolinks
    //= require_tree .
    //= require otherJsFiles
    

    并且在 application.css 文件中需要其他 css 文件作为

    *= require otherCssFiles
    

    要求将 application.js 和 application.css 文件中的每个 js 和 css 文件放在 vendor/assets 中。

    【讨论】:

    • 感谢您的回答。这个解决方案似乎有效,虽然我没有测试它。要求每个文件似乎很乏味,不像 Rails 风格。这让我想知道 Rails 资产管道是否值得在我的 HTML 代码中直接使用而不是常规调用文件。此外,我不明白为什么vendor/assets 会作为内置文件夹存在。
    • vendor/assets 文件夹用于添加第三方 css 和 javascript 文件。 vendor/assets 用于外部实体拥有的资产,例如 JavaScript 插件和 CSS 框架的代码。它在rails 3.2中
    猜你喜欢
    • 2012-02-04
    • 2014-11-16
    • 2016-08-17
    • 2018-11-14
    • 1970-01-01
    • 2019-11-15
    • 2014-02-17
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多