在 npm 运行 build in react 之后没有 service-worker.js 文件

no service-worker.js file after npm run build in react

在 运行 npm run dev 构建文件夹中没有服务-worker.js 文件。

I'm also changed serviceWorker.register() in index.js
I'm also using firebase in this project.

这里是package.json文件

{
  "name": "movie",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "axios": "^0.20.0",
    "email-verifier": "^0.4.1",
    "firebase": "^7.24.0",
    "history": "^5.0.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-lottie": "^1.2.3",
    "react-router-dom": "^5.2.0",
    "react-scripts": "^4.0.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@types/react-router-dom": "^5.1.6"
  }
}

在 firebase 中部署后,出现此错误。

serviceWorker.js:97 Error during service worker registration: DOMException: Failed to register a ServiceWorker for scope ('https://.web.app/') with script ('https://*.web.app/service-worker.js'): The script has an unsupported MIME type ('text/html').

我遇到了同样的问题,并按照 GitHub 问题中的这些步骤解决了:

create-react-app升级到4.x版本后发生。

“修复”是创建一个虚拟应用程序:

npx create-react-app my-app --template cra-template-pwa-typescript

并将相关代码复制过来:

reportWebVitals.ts

service-worker.ts

serviceWorkerRegistration.ts

并且不要忘记 index.tsx 中的初始化代码。

Create React App 提供的 serviceWorker.js 仅用于注册服务工作者文件(比如 sw.js )。请尝试以下步骤,看看是否有效:

  1. 在 'public' 文件夹中创建一个 sw.js 文件(此文件将保存您的服务工作者的逻辑)。

  2. 打开Create React App提供的serviceWorker.js进入函数register的定义

  3. 按照代码,转到注册服务工作者的行。可能是

    if(导航器中的“serviceWorker”){ navigator.serviceWorker.register('/path/to/sw.js').then() }

  4. 这里把/path/to/sw.js改成你在'public'目录下创建的文件/sw.js。这对应于hostname.com/sw.js

这样做,service worker 可能会被注册。事情从这里变得更加复杂。

GlHf