Ruby on rails 3.2 Rails资产预编译从全局范围中删除函数(TypeError:对象不是函数)。怎么把他们弄回来?
我有这样一个js代码:Ruby on rails 3.2 Rails资产预编译从全局范围中删除函数(TypeError:对象不是函数)。怎么把他们弄回来?,ruby-on-rails-3.2,asset-pipeline,sprockets,precompile,pre-compilation,Ruby On Rails 3.2,Asset Pipeline,Sprockets,Precompile,Pre Compilation,我有这样一个js代码: function Global(params) { ... } var g = { onDocLoad: function() { // on DOM load I instantiate the Global function-constructor // which is above this line, so it is already in scope var global = new window.Globa
function Global(params) {
...
}
var g = {
onDocLoad: function() {
// on DOM load I instantiate the Global function-constructor
// which is above this line, so it is already in scope
var global = new window.Global(params);
}
window.addEventListener("load", g.onDocLoad, false);
如果我将此文件作为静态文件使用,而不进行预编译,则一切正常
如果我预编译它:
rake assets:precompile:all RAILS_ENV=development
然后刷新我得到的页面:
Uncaught TypeError: object is not a function
与new window.Global(params)正好在同一行上代码>。它说,Global
不是一个函数。但这不可能是真的。这是一个函数
我调试了那一行,发现当到达这一行时,全局范围内的Global
是null
。没有具有这样名称的函数
我的问题类似于这些问题:
但他们的解决方案不适用于我的情况
有什么问题吗?为什么预编译会破坏工作代码?因此,我学会了如何避免它。但我不知道为什么会这样
在开发模式中,资产按照清单文件中指定的顺序作为单独的文件使用。本舱单:
//= require core
//= require projects
//= require tickets
将生成此HTML,三个需要-三个单独的标记:
<script src="/assets/core.js?body=1" type="text/javascript"></script>
<script src="/assets/projects.js?body=1" type="text/javascript"></script>
<script src="/assets/tickets.js?body=1" type="text/javascript"></script>
当“调试模式”处于禁用状态时,链轮将连接并在所有文件上运行必要的预处理器。关闭调试模式后,将生成上述清单:
<script src="/assets/application.js" type="text/javascript"></script>
错误消失了
我认为原因在于文件的顺序。使用debug=true
预编译会丢失正确的文件序列,尽管在我的清单中指明了正确的序列(这只是一个简单的js文件,somefile.js
,您添加到页面中;他们只称之为清单)
<script src="/assets/application.js" type="text/javascript"></script>
config.assets.debug = false
// and then
rake assets:precompile:all RAILS_ENV=development