create-react-app使用自定义服务工作者而不弹出

时间:2017-10-02 10:05:51

标签: javascript reactjs webpack service-worker

我有一个现有的应用我尝试转换为使用React。我已使用全新的create-react-app复制其功能(使用react-scripts 1.0.13)。

我想使用我现有的服务工作者。我注意到CRA创建了自己的服务工作者; webpack配置中的代码(使用SWPrecacheWebpackPlugin)创建了一个非捆绑模块service-worker.js。所有其他JS模块都捆绑在一起。

根据我的理解,我无法复制现有的服务工作者existing-service-worker.js并尝试导入,因为所有JS模块都捆绑在一起。

我不想退出。

我已经分叉create-react-app以便自定义react-scripts并在webpack配置中使用不同的逻辑,这将允许我使用我现有的服务工作者而不是使用{创建的服务工作者{1}} ...但是,我不知道该怎么做。这是我第一次使用React和webpack。

有人能指出我正确的方向,并帮助我在React中使用我现有的服务工作者而不会弹出?

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

有一个专门为该用例构建的npm库。它叫做cra-append-sw

大多数细节都在npm页面中,但是简单地说,您只需要安装该库(npm i --save cra-append-sw)。

对package.json进行一些更改:

"start": "react-scripts start && cra-append-sw --mode dev ./public/custom-sw-import.js",
"build": "react-scripts build && cra-append-sw --skip-compile ./public/custom-sw-import.js" 

最后在您的公用文件夹中创建一个名为custom-sw-import.js的文件,您在其中编写的所有服务人员代码都将简单地附加到cra的服务人员中。

由于我使用相同的原理制作了我的网站www.futurist-invenzium.com,该网站提供了PWA提供的所有功能的演示,因此我可以验证这项工作。

如果您想要更多in depth answer,我还发现此博客文章对您有所帮助。

答案 2 :(得分:0)

您需要弹出。

(或者,创建你自己的分叉 - 我不推荐)

  

您不必使用弹出。策划的功能集适用于中小型部署,您不应觉得有义务使用此功能。但是我们知道如果你准备好它就无法自定义它,这个工具就没用了。

https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#npm-run-eject

否则您将无法自定义生成的服务工作者。

但是,如果您担心永久性eject操作,则可以始终克隆项目目录并在克隆中使用npm run eject来解决问题。原件将保持不变。

答案 3 :(得分:0)

我没有eject

就完成了

您可以将工作人员放在public文件夹中,然后您必须自己进行细分和缩小。

如此处https://github.com/facebook/create-react-app/issues/1277

所述

答案 4 :(得分:0)

第4版中的好消息!:

从Create React App 4开始,您可以完全控制 通过创建自己的服务,在此服务工作者中自定义逻辑 src / service-worker.js文件,或自定义由 cra-template-pwa(或cra-template-pwa-typescript)模板。

https://youtu.be/pxjpWPJo8vM?t=29