在执行资产预编译(rake assets:precompile
)之前,我想将gulp
个任务应用于我的JavaScript文件:
app/assets/javascripts/my_angular/directives/*.js
app/assets/javascripts/my_angular/controllers/*.js
因此,当我稍后运行rake assets:precompile
时,它将选择已经处理过的gulp文件。
但对我来说问题是我不想简单地使用gulp
输出文件覆盖现有的JS文件,因为我仍然需要原始的,未触及的文件以便于开发。
我想我需要有两个文件夹:
1)development_assets
2)production_assets(带有gulp
输出的自动生成的文件夹)
Rails是否可以为不同的环境设置不同的资源目录?(开发,生产)。如果是 - 如何配置?
也许我的问题有另一种解决方案?没有两个单独的目录......我愿意接受建议。
答案 0 :(得分:2)
config.assets.prefix = '/gulped-assets'
config/environments/production.rb
configure the assets path。如果您在/gulped-assets
中执行此操作,它将适用于生产但不适用于开发,让您仍然可以在开发中使用原始文件。您需要确保部署过程在资产编译之前运行Gulp,或者在本地运行Gulp并在您的存储库中包含/assets
。
您还可以add a preprocessor到资产管道,这样您只需要一个.sass
目录。您可以通过指定文件扩展名和处理程序,然后将扩展名添加到您希望以这种方式处理的所有文件,就像使用.erb
,module BangBang
class Template < ::Tilt::Template
def prepare
# Do any initialization here
end
# Adds a "!" to original template.
def evaluate(scope, locals, &block)
"#{data}!"
end
end
end
等一样。来自Rails例子,它看起来像这样:
# config/initializers/bang.rb
Sprockets.register_engine '.bang', BangBang::Template
.bang
然后,扩展程序中包含!
的任何文件都会附加data
。已经支持很多不同的任务了,所以也许你可以避免让Gulp支持Sprockets-only管道。根据您的Gulp任务,您甚至可以通过它们进行shell并运行<div class="product">
<input type="text" name="barrel">
<input type="text" name="barrel">
<input type="text" name="barrel">
<input type="text" name="barrel">
<a href="#" class="add-to-cart">Add to Cart</a>
</div>
<div class="product">
<input type="text" name="barrel">
<input type="text" name="barrel">
<input type="text" name="barrel">
<input type="text" name="barrel">
<a href="#" class="add-to-cart">Add to Cart</a>
</div>
来构建混合管道。
或者,您可以转向另一个方向并使用仅限Gulp的管道替换Sprockets。有很多人这样做,我在这里写的任何东西都很长,只会复制他们的工作,所以看看gulp-rails-pipeline宝石,或者读一下Gulp - a modern approach to asset pipeline for Rails developers的另一个角度吧