我有一个脚本,它基本上是用户嵌入的“小部件”。
它只是简单的vanilla javascript,对其他资源没有任何要求。它位于/app/assets/javascripts/delivery.js
我想要做的是让文件被压缩/编译,然后让用户从脚本标签直接链接到它,即。 <script src="http://example.com/assets/delivery.js"></script>
但是现在......那是不行的。该文件在生产中不存在。
那么,如何像管道中的任何其他JS文件一样压缩该文件,然后直接链接到它?
答案 0 :(得分:3)
如果你添加
config.assets.precompile += ['delivery.js']
到您的application.rb,然后delivery.js将被视为清单文件:它将被预编译并在生产中作为delivery.js提供。清单文件通常只是一系列//= require
(或//= require_directory
)语句,但它们包含的任何javascript也将添加到生成的文件中。
默认情况下,application.js清单包含所有内容 - 您希望调整此内容以使其不包含仅用于独立提供的javascript。
答案 1 :(得分:0)
首先,确保您的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来提供没有摘要的文件)。