Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 如何在创建基于React应用程序的应用程序中配置Workbox?_Webpack_Service Worker_Create React App - Fatal编程技术网

Webpack 如何在创建基于React应用程序的应用程序中配置Workbox?

Webpack 如何在创建基于React应用程序的应用程序中配置Workbox?,webpack,service-worker,create-react-app,Webpack,Service Worker,Create React App,我正在使用CreateReact应用程序(CRA),它默认情况下注册服务工作人员(使用),如果可能的话,我想让他们保持启用状态。然而,我绝对不能允许我的应用加载任何外部源,但是CRA中的Workbox默认从Google CDN加载Workbox sw.js(如中所示) 目前,我正在使用以确保请求被阻止,但这当然会导致记录错误消息,而且我可能根本不注册服务人员 如何将我的应用程序配置为仅使用本地JS,最好不弹出?使用本地Workbox文件而不是CDN 如果您不想使用CDN,那么切换到托管在您自己域

我正在使用CreateReact应用程序(CRA),它默认情况下注册服务工作人员(使用),如果可能的话,我想让他们保持启用状态。然而,我绝对不能允许我的应用加载任何外部源,但是CRA中的Workbox默认从Google CDN加载
Workbox sw.js
(如中所示)

目前,我正在使用以确保请求被阻止,但这当然会导致记录错误消息,而且我可能根本不注册服务人员


如何将我的应用程序配置为仅使用本地JS,最好不弹出?

使用本地Workbox文件而不是CDN 如果您不想使用CDN,那么切换到托管在您自己域上的Workbox文件就足够容易了

最简单的方法是通过workbox cli的copyLibraries命令或GitHub版本获取文件,然后通过modulePathPrefix配置选项告诉workbox sw在哪里可以找到这些文件

如果将文件放在/third\u party/workbox/下,您可以这样使用它们:

importScripts('/third_party/workbox/workbox-sw.js');

workbox.setConfig({
modulePathPrefix: '/third_party/workbox/'
});
这样,您将只使用本地Workbox文件


fore reference

我没有找到合适的解决方案,因此我最终使用了两种机制来实现类似的效果:

  • CI构建脚本将对Google CDN的引用替换为本地URL:
  • 为了确保这一点永远不会被忽略,我还设置了(以及元标记,以防应用程序托管在标题无法轻松设置的地方),这样浏览器就知道我的应用程序无法访问谷歌CDN(或者其他任何东西,只有少数例外情况在我的控制下)

  • 解决方案的第一部分有点难看,我仍然对更好的方法感兴趣,但这是我在不弹出CRA的情况下能找到的最好方法。

    @sancelot谢谢,但是-我把这个放在哪里?package.json、registerServiceWorker.js或其他地方?在我可以在Create React应用程序中编辑的任何文件中,我都没有看到对
    workbox
    的任何引用。。。我遗漏了什么吗?这条线索在sancelot解释了它。我认为这条线索解释得不够充分。有人能在Stackoverflow中发布这个问题的答案吗?非常感谢。我很好奇,这是否是一般社区的建议?我认为CRA将提供一个更优雅的解决方案,将Workbox库绑定到我的JS包中。。。
    sed -i -e 's#https://storage[.]googleapis[.]com/workbox-cdn/releases/[0-9.]*/workbox-sw.js#/workbox/workbox-sw.js#g' build/service-worker.js