【问题标题】:Include js/css module in Rails in vendor/lib dir在 vendor/lib 目录中的 Rails 中包含 js/css 模块
【发布时间】:2012-02-17 16:43:08
【问题描述】:

我有一个 Rails 3.1 项目,我正在尝试包含一个同时具有 js、css 和图像文件的 jQuery 插件,我已将它们放在 vendor/assets/chosen/{images,javascripts,stylesheets} 下,并且我添加了 index.css 和 index.js到各自的目录。

然后我尝试将插件包含在 application.css 和 application.js 中:

application.js:

    //= require chosen

应用程序.css

    /*
     *= require chosen
    */

但是当我加载页面时,我得到了这个错误:

couldn't find file 'chosen'
  (in /..../app/assets/stylesheets/screen.css:8)

根据 2.1.2 下的this 页面,您应该至少可以使用 lib 目录(我已经尝试过,结果相同)来执行此操作。有人有什么建议吗?

更新: 当我在 rails 控制台中检查 assets.paths 时,vendor/assets/chosen 包括在内。

【问题讨论】:

  • 您提到的在lib 文件夹中包含整个包的版本提到,为了使其工作,您需要在插件根目录中创建一个index.js 文件。会不会被选的没有?
  • ...为什么不直接使用已经存在的 rails 插件呢? github.com/bseanvt/chosen_rails

标签: javascript ruby-on-rails css sprockets


【解决方案1】:
//= require chosen

您在 application.js 中添加的上述代码告诉 Rails 在资产路径中查找名为“chosen”的文件。由于您没有名为“chosen”的文件,rails 抱怨“找不到文件”,这是正确的。你需要的是require_tree

#application.js
//= require_tree ../../../vendor/assets/chosen/javascripts

#application.css
*= require_tree ../../../vendor/assets/chosen/stylesheets

【讨论】:

    【解决方案2】:

    尝试将相关路径写入插件文件。例如(这就是我在项目中包含颜色选择器的方式):

    //= require ../../../vendor/assets/javascripts/colorpicker #in application.js
    *= require ../../../vendor/assets/stylesheets/colorpicker #in application.css
    

    对你来说,它会是这样的:

    //= require ../../../vendor/assets/javascripts/chosen #in application.js
    *= require ../../../vendor/assets/stylesheets/chosen #application.css
    

    还要确保您的路径对 Rails 可见。 (config.assets.paths)

    【讨论】:

    • 尽管相对路径可能有效,但对于深度嵌套的文件,它会产生非常丑陋的包含,我这样做的方式应该根据 Rails 指南工作。抱歉,忘记在我的帖子中提到我已经在 rails 控制台中检查了 assets.paths 并且其中包含 vendor/assets/chosen。
    • 最好将外部 javascripts 和 css 保存在单独的文件夹中,命名为:vendor/javascriptsvendor/stylesheets。尝试将它们放在这些文件夹中,并在 application.(js/css) 中添加 require 语句。它应该可以工作。
    • 它们位于vendor/assets/chosen 下的单独文件夹下。我确实考虑过将它们放在vendor/assets/javascriptsvendor/assets/stylesheets 下,但由于它是由其他人编写的自包含模块,我宁愿将文件以某种方式组合在一起,以便让未来的维护者清楚这些文件属于彼此。另一种选择是将它们放在vendor/assets/javascripts/chosen 之类的东西下,但这仍然会使它们相当分散。
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2018-09-15
    • 2021-12-25
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多