【问题标题】:How to load vendor asset folder in Rails 4?如何在 Rails 4 中加载供应商资产文件夹?
【发布时间】:2014-11-16 23:05:51
【问题描述】:

我有一个包含多种文件类型的插件,以及它自己的树结构(html、css、js、文档、图像等)

我不想遍历插件文件夹,并将所有 css 和 js 文件拆分到 vendor/assets/js/ vendor/assets/css/ 文件夹中,我只想保持整个插件文件夹不变。例如,

vendor/assets/multipurpose_bookshelf_slider/

如何确保路径正确加载,并在我的清单文件中引用它们?

目前,我有一些文件的地方如下(不详尽)

/my_app/vendor/assets/multipurpose_bookshelf_slider/css/skin01.css
/my_app/vendor/assets/multipurpose_bookshelf_slider/js/jquery.easing.1.3.js
/my_app/vendor/assets/multipurpose_bookshelf_slider/
/my_app/vendor/assets/multipurpose_bookshelf_slider/

我在

中引用它们

application.js

//= require multipurpose_bookshelf_slider/js/jquery.easing.1.3.js
//= require multipurpose_bookshelf_slider/js/jquery.bookshelfslider.min.js

application.css.scss

@import "css/bookshelf_slider";
@import "css/skin01";

【问题讨论】:

    标签: ruby-on-rails plugins ruby-on-rails-plugins


    【解决方案1】:

    assets 下直接创建的任何文件夹都将添加到加载路径中。可以像往常一样引用该文件夹中的文件:

    如果你有

    • vendor/assets/custom/js/file.js

    • vendor/assets/custom/css/file.css

    然后vendor/assets/custom/ 将被添加到加载路径中。

    通过执行以下操作将您的文件包含在以下文件中:

    application.js

    //= require js/file

    application.css.scss

    @import "css/file";

    完成后,请确保重新启动本地服务器,因为只有在启动服务器时才能识别加载路径。

    注意:要查看加载路径列表,请在终端输入 rails c,然后输入 Rails.application.config.assets.paths

    【讨论】:

    • 为什么是 application.css.scss 而不仅仅是 application.css?这值得初学者多解释一下
    • scss 是文件类型后缀。它使用 sass/scss 预处理器。在 rails 中,链接后缀使其按相应的最后后缀的“语言”进行解析。 thesassway.com 问题是如何加载资产,不管它是什么文件。如果还有其他后缀的资产(例如 jpg 等),那么它们也将被正则表达式或文字字符串值匹配。为初学者清理东西是件好事。我确实认为这对这个问题无关紧要。
    • 哦,我明白你的意思了。 scss 文件不是“主”css 文件 application.css 中引用的内容。而是 application.css 本身被改变了。有道理。我收回我关于它无关紧要的说法。很方便,答案是完全一样的,虽然 =] CSS 预处理非常方便,SASS/SCSS 是一个相当不错的方法。其他人更少。另一种是 Stylus,我发现它的语法比其他两种都更简洁,但它周围的生态系统似乎较少。
    • 另外,如果你刚刚创建了vendor/assets目录,需要重启服务器才能加载vendor/assets下的文件。
    • 自定义文件夹下的图片无法编译。您需要添加类似 config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 的内容,因为 vendor/ 和 lib/ 下的所有内容都必须手动添加到预编译列表中。如果需要单独的file.js或者file.css,还需要添加到预编译列表中。
    【解决方案2】:

    如果您正在运行的应用程序激活了 assets-pipeline,它应该在扩展 application.rb 中的路径后找到您的资产

    config.assets.paths << Rails.root.join("multipurpose_bookshelf_slider")
    

    【讨论】:

    • 正如ahnbizcad's answer 所说,该路径应自动添加到资产路径中。如果您没有看到它们,可能是您必须在添加新的 vendored 文件夹后重新启动应用程序 - 搜索路径仅在启动期间更新。
    【解决方案3】:

    我更喜欢 D7na 的回答,但我认为有一点改进。

    只要是和资产相关的,我觉得还是放在assets.rb文件里比较好。

    assets.rb:

    Rails.application.config.assets.paths << Rails.root.join("multipurpose_bookshelf_slider")
    

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 2018-11-14
      • 2012-02-04
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      相关资源
      最近更新 更多