直接链接到资产管道中的编译资源?

我有一个脚本,基本上是用户嵌入的“小部件”。

它只是简单的vanilla javascript,对其他资源没有任何要求。 它位于/app/assets/javascripts/delivery.js

我想要做的是让文件被压缩/编译,然后让用户从脚本标签直接链接到它,即。

但是现在……那是不行的。 该文件在生产中不存在。

那么,我如何像管道中的任何其他JS文件一样压缩该文件,然后直接链接到它?

如果你添加

  config.assets.precompile += ['delivery.js'] 

到您的application.rb,然后delivery.js将被视为清单文件:它将被预编译并在生产中作为delivery.js提供。 清单文件通常只是一系列//= require (或//= require_directory )语句,但它们包含的任何javascript也将添加到生成的文件中。

默认情况下,application.js清单包含所有内容 – 您希望调整此内容以使其不包含仅用于独立提供的javascript。

首先,确保您的app / assets / javascripts / delivery.js不包含在您的顶级“清单”javascript文件中,即app / assets / javascripts / application.js。 application.js通常包括//= require_tree . ,所以它默认包含你的delivery.js。 你需要改变它。 将“require_tree”替换为您希望在application.js中预编译和组合的所有资产的单独“require”语句。

接下来,更新您的环境文件(生产环境的config / environments / production.rb)以将您的文件包含在预编译资产列表中:

 config.assets.precompile += %w( delivery.js ) 

现在,您将它作为公共/资产目录中的单独文件,以与application.js相同的方式进行编译和压缩。 请记住,它的名称附加了一个摘要,与您的application.js类似(当然,除非您通过设置config.assets.digest = false来提供没有摘要的文件)。