像(在初始化程序中)的东西:
Sprockets.before_precompile do
# some custom stuff that preps or autogenerates some asset files
# that should then be considered in the asset pipeline as if they were checked in
end
具体来说,我想运行一个gulp任务来将一些Javascript与一些特殊的预处理器捆绑在一起,而我并不是要重写我的gulpfile来让资产管道来处理所有事情......而且我也是希望这可以在Heroku上工作,而不需要自定义buildpack。有什么想法吗?据推测,链轮有这些类型的挂钩。
答案 0 :(得分:25)
正如我从源代码中看到的,Sprockets没有这样的钩子,但你可以使用rake任务钩子。例如,您将创建一个rake任务来启动所有预处理器,gulp等,因此可以在预编译之前放置此任务。
# lib/tasks/before_assets_precompile.rake
task :before_assets_precompile do
# run a command which starts your packaging
system('gulp production')
end
# every time you execute 'rake assets:precompile'
# run 'before_assets_precompile' first
Rake::Task['assets:precompile'].enhance ['before_assets_precompile']
然后您只需运行rake assets:precompile
,结果任务before_assets_precompile
将在它之前执行。
另请确保使用system
而不是exec
,因为exec
将在运行此前任务的阶段退出流程,并且在assets:precompile
之后不会运行{{1}}本身就像预期的那样。
来源: