1

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

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

我想做的是让文件被压缩/编译,然后让用户从脚本标签直接链接到它,即。<script src="http://example.com/assets/delivery.js"></script>

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

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

4

2 回答 2

3

如果你添加

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

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

默认情况下,application.js 清单包含所有内容 - 您希望对其进行调整,使其不包含仅旨在独立提供的 javascript。

于 2013-02-28T15:14:05.487 回答
0

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

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

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

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

于 2013-02-28T16:15:03.310 回答