【发布时间】:2014-07-03 14:21:39
【问题描述】:
所以我有一个具有页面特定样式和 css 的项目。我已将这些文件放入它们自己的目录 assets/#{type}/page-specific/ 中,并且我正在尝试编写一个正则表达式规则来通知预编译器对它们进行处理。
这对于 JS 方面非常有用,但 css 被证明更加困难。
# page specific style files:
app/assets/stylesheets/page-specific/something.css.sass
app/assets/stylesheets/page-specific/default.css
app/assets/stylesheets/page-specific/home.css.scss
我在我的config/initializers/assets.rb 文件中使用这个正则表达式:
Rails.application.config.assets.precompile << /(page-specific\/[^(css)]+.css)/
问题在于 [^(css)] 部分并没有完全满足我的要求,因为它会过滤掉任何包含 c 或 s 的内容。我真正在寻找的是一种匹配整个字符串“css”并停在那里的方法。
另外,我知道传统的智慧是简单地以不需要特定于页面的样式表的方式编写样式,而使用包含整个样式表的 application.css。我同意。然而,这是一个非常大的代码库,并且有很大的时间压力将这个 Rails 升级带回家,而且没有时间花在分析和重构这种性质的东西上。
我尝试让分隔符指令[^\.] 在第一个点处停止,但是这会在一些使用点作为分隔符的供应商样式表(例如jquery.treeview.css.sass)上爆炸。显然我可以更改文件名,但我们是一个正在成长的大团队,我想让规则尽可能灵活,这样我们就不会有文件偷偷溜进来,当他们没有得到时会在生产中爆炸预编译。
【问题讨论】:
-
你有没有“*= require_tree”。在你的 app/assets/stylesheets/application.css 的某个地方?如果没有,请尝试添加它,可能会有所帮助。
-
如前所述,需要单独预编译和包含完整应用程序范围之外的资产。
-
所有三个示例文件路径似乎都不是“在整个应用程序的范围之外”(如果这意味着“在应用程序的目录树之外”)。实际上,默认情况下它们应该被资产预编译拾取,因为它们在 app/assets 中(如果你的 application.css 中存在 require_tree)。我想我搞错了。
-
资产预编译不会提取任何 js 或 css 文件(或将被处理成 js 或 css 文件的文件),除了那些包含在 application.js 或 application.css 中的文件。我不希望这些文件包含在这些文件中,而是被编译并可供运行
<%= javascript_include_tag 'page-specific/thingie" %>
标签: ruby-on-rails regex asset-pipeline