Rails 6 + Webpack + jQuery刷新后不保存更改

时间:2019-09-16 07:06:23

标签: jquery ruby-on-rails datatables webpacker ruby-on-rails-6

我正在尝试修复Rails 6 + Webpack应用程序中的一些控制台错误,即使更改后我重新启动了服务器,更改似乎也没有保存。

例如,出现此错误:

datatables.js:32 Uncaught TypeError: Cannot read property 'isDataTable' of undefined
    at HTMLDocument.<anonymous> (datatables.js:32)
    at HTMLDocument.dispatch (jquery.js:4588)
    at HTMLDocument.elemData.handle (jquery.js:4408)
    at Object../node_modules/turbolinks/dist/turbolinks.js.e.dispatch (turbolinks.js:75)
    at r.notifyApplicationAfterPageLoad (turbolinks.js:994)
    at r.pageLoaded (turbolinks.js:948)
    at turbolinks.js:872

要解决此问题,我将有问题的行更改为:

$(document).on('turbolinks:load', function() {
  if (!$.fn.dataTable.isDataTable("table")) {
    $("table").DataTable();
  }
});

我重新启动了服务器,甚至是浏览器和整个计算机(以防万一),但是错误仍然存​​在。 当我访问源代码时,好像没有更改代码,但是在编辑器中看到了更新的版本。 我所做的每一次更改都会发生这种情况,我想我缺少明显的东西。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

由于语法错误或缺少模块,webpack很可能无法编译源代码。在更改源时,在另一个控制台窗口中运行bundle exec bin/webpack-dev-server以查看正在进行的编译(有错误)。或者,您可以发出rake webpacker:compile来手动构建包。

例如,您可以使用rails serverwebpack-dev-server gem在同一窗口中同时运行Procfileforeman

答案 1 :(得分:0)

尝试将您的库添加到body标签下的applicatiob_vendor: 经验:

<body>
 #main-content........
 #footer.............
 = javascript_include_tag 'application_vendor'
</body>

,然后创建application_vendor.js并要求您的js库为您所需。接下来,添加到您的asset.rb

Rails.application.config.assets.precompile += %w[ application_vendor.js ]

希望对您有用

答案 2 :(得分:0)

如果您将Rails 6+与webpacker一起使用,则另一个原因是您的Rails应用程序不编译app/assets,而是使用不包含CSS文件的新“ app / javascripts”文件夹。

如果是这样,您可以参考该线程https://stackoverflow.com/a/59870385,以获取有关如何在Webpack构建中包括app/assets/stylesheets的解决方案。