Home

Issue: 1108

Nuxt.js + PWA - Service Worker errors

[issue link]

Trying to implement PWA module in my nuxt.js install. But getting some error related to service workers.

Error 1
ServiceWorker failed to install: ServiceWorker failed to handle event (event.waitUntil Promise rejected)

Error 2:
Uncaught (in promise) request-not-cached: an error was thrown by workbox with error code; ‘`request-not-chached’

URL: https://proposalmate.now.sh/

error

package.json

{
  "name": "proposalmate",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "@nuxtjs/component-cache": "^1.0.0",
    "@nuxtjs/pwa": "^0.2.0",
    "autoprefixer": "^7.1.2",
    "css-loader": "^0.28.4",
    "cssnano": "^3.10.0",
    "element-theme-default": "^1.3.7",
    "element-ui": "^1.3.7",
    "nuxt": "^1.0.0-alpha.5",
    "postcss-cssnext": "^3.0.2",
    "postcss-hexrgba": "^0.2.1",
    "postcss-import": "^10.0.0",
    "postcss-loader": "^2.0.6",
    "postcss-nested": "^2.0.4",
    "style-loader": "^0.18.2",
    "vue": "2.3.4",
    "vue-server-renderer": "2.3.4",
    "vue-style-loader": "^3.0.1",
    "vue-template-compiler": "2.3.4"
  },
  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "start": "nuxt start",
    "generate": "nuxt generate",
    "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
    "precommit": "npm run lint",
    "element": "et -c css/element-variables.css -o css/theme -w"
  },
  "devDependencies": {
    "babel-eslint": "^7.2.3",
    "eslint": "^4.2.0",
    "eslint-config-standard": "^10.2.1",
    "eslint-loader": "^1.9.0",
    "eslint-plugin-html": "^3.1.0",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-node": "^5.1.0",
    "eslint-plugin-promise": "^3.5.0",
    "eslint-plugin-standard": "^3.0.1"
  }
}

nuxt.config.js

module.exports = {
  /*
  ** Headers of the page
  */

  head: {
    title: 'starter',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: 'Nuxt.js project' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
      { rel: 'dns-prefetch', href: 'https://proposalmate.now.sh' }
    ]
  },
  /*
  ** Customize the progress-bar color
  */
  loading: { color: '#3B8070' },

  manifest: {
    name: 'ProposalMate',
    short_name: 'ProposalMate',
    lang: 'en',
    description: 'Create beautiful business proposals',
    theme_color: '#188269',
    background_color: '#000'
  },

  modules: [
    '@nuxtjs/pwa',
    '@nuxtjs/component-cache'
  ],

  render: {
    static: {
      maxAge: '1y',
      setHeaders(res, path) {
        if (path.includes('sw.js')) {
          res.setHeader('Cache-Control', 'public, max-age=0')
        }
      }
    }
  },

  css: [
    { src: '~/css/theme/index.css', lang: 'postcss' },
    { src: '~/css/main.css', lang: 'postcss' }
  ],

  plugins: [
    'plugins/element-ui.js'
  ],
  /*
  ** Build configuration
  */
  build: {

    /*
    ** Run ESLINT on save
    */
    extend(config, ctx) {

      const cssLoader = config.module.rules.find((loader) => loader.test.toString() === '/\\.css$/')
      cssLoader.use.splice(2, 0, {
        loader: 'postcss-loader',
        options: {
          sourceMap: true
        }
      })

      if (ctx.isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
    }

  }
}
This question is available on Nuxt.js community (#c969)