即使经过Rails Asset Pipeline tutorial,我也有点困惑。我正在尝试添加最新的jquery文件。我是通过布局javascript_include_tag还是通过application.js?
执行此操作如果是,那么有什么区别?如果我在application.js中使用//= require jquery
,我将如何指定实际的内部版本号
<%= javascript_include_tag "http://ajax.googleapis.com/ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js",
"jquery.rails.js",
"application.js"
%>
上面的方法是使用上面的行添加jquery两次,然后通过application.js
//= require jquery
应用程序是否需要从已安装的gem获取js文件。在我的Gemfile中,我有一行
gem 'jquery-rails'
所以我的主要问题是我应该从哪里加载我的特定jquery版本。
答案 0 :(得分:2)
jquery-rails
包含特定版本的jquery(哪个版本将取决于gem的版本),这就是使用//= require jquery
时所包含的内容。如果您这样做,则不包含javascript_include_tag
的jquery。
如果您想使用与jquery-rails
gem中包含的版本不同的版本,请将其设置为javascript_include_tag
,并省略//= require jquery
指令。< / p>
为了进一步解释,资源管道使用//= require
语法在加载application.js
时加载(以及在预编译时,也合并到)特定文件。其中的主要好处之一是单个资源文件的缓存和交付速度更快。使用javascript_include_tag
单独包含多个脚本是另一种加载脚本的方法,但由于它为每个文件添加了单独的<script>
标记,因此它不会获得{{1}提供的好处。语法。
然而,对于CDN服务的脚本,损失的利益主要是弥补的。这是因为它们可能已经被客户端缓存,服务非常快,并且保证将来不会被修改。
答案 1 :(得分:0)
文件在生产中的一个文件中提供(压缩和编译),意思是:
//= require my_file
你得到:
<script ... src="/assets/application.js" ...>
在application.js中包含my_file,并进行压缩。这是默认的生产配置:
config.assets.compress = true # just to compress
config.assets.compile = false # false to use precompiled assets, you precompile with rake assets:precompile
# true to allow compilation in production
注意:预编译是将scss和coffee文件转换为css和javascript并将它们保存在公共目录下,以便在请求这些文件时不要点击Rails后端。
javascript_include_tag 'application', 'my_second_file'
你得到:
<script ... src="/assets/application.js" ... >
<script ... src="/assets/my_second_file.js" ... >
如果您离开my_first_file
,您将在application.js中嵌入//= require my_first_file
。
在生产中,你不会进行调试,不是吗?将它们放在application.js
中是好的。