【问题标题】:Rails 4 - Javascript doesn't work after the deployment on HerokuRails 4 - 在 Heroku 上部署后 Javascript 不起作用
【发布时间】:2016-02-22 16:08:21
【问题描述】:

在部署之前,我在浏览器控制台中出现以下错误:

ReferenceError: require is not defined npm.self-...js:2:0

尽管如此,javascript 在我的本地服务器上运行良好。当我在 heroku 上部署我的应用程序时,它不会,但 css 会,所以我不确定资产管道引起的问题。我有

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

在我的 Gemfile 中。我尝试在本地甚至通过“heroku run”命令预编译资产,但它没有改变任何东西。这是我的 application.js:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require moment
//= require bootstrap-datetimepicker

$(function() {
  $("#datetimepicker").datetimepicker({
    locale: "en",
    format: "lll"
  });
});

$(function() {
  $("#events").on("click", ".pager a", function() {
    $.getScript(this.href);
    return false;
  });
});

还有 npm.js:

// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
require('../../js/transition.js')
require('../../js/alert.js')
require('../../js/button.js')
require('../../js/carousel.js')
require('../../js/collapse.js')
require('../../js/dropdown.js')
require('../../js/modal.js')
require('../../js/tooltip.js')
require('../../js/popover.js')
require('../../js/scrollspy.js')
require('../../js/tab.js')
require('../../js/affix.js')

如果你问我可能会分享 github 链接。谢谢!

【问题讨论】:

  • 你有预编译的资产吗?
  • @GaganGami 是的,但预编译似乎不起作用。

标签: javascript ruby-on-rails ruby heroku asset-pipeline


【解决方案1】:

对不起,没有足够的声誉来发表评论,否则会有。

require() 函数未内置在浏览器中。我建议尝试删除

//= require_tree .

& 像这样手动添加您的 javascript 文件(仅用于测试,您不会收到错误消息)

//= require desired_js_file

//= require_tree . 预编译 asset/javascript 的根目录中的所有内容并服务于 http 请求。当浏览器遇到带有require() functionjs 文件时,它可能会给您错误。 希望这有帮助!

【讨论】:

  • 感谢您的回答,但我对 application.js 文件本身有疑问。如果您查看上面的这个文件,您会在文件末尾看到两个函数。所以这些功能不起作用。
猜你喜欢
  • 2021-09-04
  • 2013-09-12
  • 2016-08-06
  • 2017-04-09
  • 2021-04-30
  • 1970-01-01
  • 2017-01-12
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多