微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用 Webpack 注册自定义 Firebase FCM Service Worker

如何解决无法使用 Webpack 注册自定义 Firebase FCM Service Worker

用户可以在任何地方安装我们的软件,我们不能保证一个文件会存在于域的根目录中。为了解决这个问题,我为 FCM 注册一个自定义服务工作者,一切正常。没有问题。

但是!这仅适用于本地开发机器。在生产服务器上,webpack 将所有内容捆绑到 /dist/ 中,但找不到注册 service worker 的文件

所以我很好奇如何使下面的代码与 webpack 一起工作。

特别是:

navigator.serviceWorker.register('/public/js/services/firebase-messaging-sw.js') 

以上不适用于 webpack,因为它在服务器上指向一个不存在的文件。完整过程减去下面的一些代码

    navigator.serviceWorker.register('/public/js/services/firebase-messaging-sw.js')
            .then((registration) => {
                this.messaging.getToken({serviceWorkerRegistration: registration,vapidKey: "CODE_HERE"}).then((currentToken) => {
                    //just some code here,removed to keep example smaller
                    }
                }).catch((err) => {
                    //just some code here,removed to keep example smaller
                });
            });

解决方法

你能试试这个吗?

var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin');
...
plugins: [
  new ServiceWorkerWepbackPlugin({
    entry: path.join(__dirname,'path/of/your_service_worker_file.js'),}),],...

注意:我不确定路径值

还必须在主线程中注册:

import runtime from 'serviceworker-webpack-plugin/runtime';

if ('serviceWorker' in navigator) {
  const registration = runtime.register();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。