如何从Rails的JS文件内部引用已编译的Webpack包文件的路径?

时间:2019-08-09 02:58:54

标签: javascript ruby-on-rails webpack webpacker

我正在将webpacker gem(版本4.0.7)用于Rails 6 RC2应用程序,并且我也在使用serviceworker-rails中间件gem(版本0.6.0)将Service Worker与Rails集成在一起。 。

现在,我想创建一个serviceworker.js包文件(我从serviceworker-rails README文件中复制并修改了该文件),以便Webpack可以使用它,并使用{ {1}}中间件。

因此,在serviceworker-rails(安装了app/javascript/packs/serviceworker.js.erb)中,我这样做了:

erb-loader

这样做会导致Webpack无法编译Service Worker包,因为我无法在包文件中使用function onInstall(event) { console.log('[Serviceworker]', "Installing!", event); event.waitUntil( caches.open(CACHE_NAME).then(function prefill(cache) { return cache.addAll([ '<%= asset_pack_path "application.js" %>', '<%= asset_pack_path "application.css" %>', '/offline.html', ]); }) ); } ... (甚至在编译之前,都无法获取已编译包的路径)。所以问题是,如何在Service Worker脚本中引用编译的JS和CSS包的路径,以便Service Worker可以缓存这些文件?

1 个答案:

答案 0 :(得分:0)

因此,在深入研究了很长时间之后,我在GitHub上找到了此issue的解决方案(并且意识到我没有正确地阅读和理解错误,因为错误是undefined method 'asset_pack_path',并且与编译无关)。只需执行以下操作即可解决此问题:

function onInstall(event) {
  console.log('[Serviceworker]', "Installing!", event);
  event.waitUntil(
    caches.open(CACHE_NAME).then(function prefill(cache) {
      return cache.addAll([

        <% helpers = ActionController::Base.helpers %>

        '<%= helpers.asset_pack_path "application.js" %>',

        '<%= helpers.asset_pack_path "application.css" %>',

        '/offline.html',

      ]);
    })
  );
}

...