vue 中使用 Service Worker 遇到的问题

Posted 飞翔的熊blabla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue 中使用 Service Worker 遇到的问题相关的知识,希望对你有一定的参考价值。

先贴一个Service Worker 学习笔记
张鑫旭Service Worker笔记

Service Worker工作只能在https和localhost,因为有很多大佬已经具体讲过怎么使用,那么这里就不多加赘述了,直接解决问题!

我已经知道在上线后缓存文件需要将sw.js(ServiceWorker.js 简写)放到文件的根目录,在vue项目开发模式的时候要放置才能正常使用呢?

问题:vue放置到根目录,启动项目发现找不到sw文件

 


知道问题就可以解决了,问题就是sw.js没有放置在vue项目的 http://localhost:8080/ 根目录,所以我们只需要修改webpack文件,将sw.js地址重定向就可以了!

vue-cli3简化了整个项目的配置,让你可以更专注的在于业务代码。你要是想修改可以直接新建vue.config.js 进行配置修改
Vue CLI 3配置参考

 

下面是vue.config.js配置文件:

const webpack = require('webpack')
module.exports = 
    //部署应用包时的基本 URL
    publicPath: process.env.NODE_ENV === 'production' ? '/online/' : './',
    //当运行 vue-cli-service build 时生成的生产环境构建文件的目录
    outputDir: 'dist',
    //放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
    assetsDir: 'assets',
    // eslint-loader 是否在保存的时候检查 安装@vue/cli-plugin-eslint有效
    lintOnSave: true,
    //是否使用包含运行时编译器的 Vue 构建版本。设置true后你就可以在使用template
    runtimeCompiler: true,
    // 生产环境是否生成 sourceMap 文件 sourceMap的详解请看末尾  
    productionSourceMap: true,
    configureWebpack: config => 
        if (process.env.NODE_ENV === 'production') 
            // 为生产环境修改配置...
         else 
            // 为开发环境修改配置...
        
    ,
    // css相关配置
    css: 
        // 是否使用css分离插件 ExtractTextPlugin 生产环境下是true,开发环境下是false
        extract: true,
        // 开启 CSS source maps?
        sourceMap: false,
        // css预设器配置项
        loaderOptions: ,
        // 启用 CSS modules for all css / pre-processor files.
        modules: false
    ,
    // webpack-dev-server 相关配置
    devServer:  // 设置代理
        hot: true, //热加载
        host: '0.0.0.0', //ip地址
        port: 8085, //端口
        https: false, //false关闭https,true为开启
        open: true, //自动打开浏览器
        proxy: 
            '/api':  //本地 
                target: 'xxx',
                // 如果要代理 websockets
                ws: true,
                changeOrigin: true
            ,
            '/test':  //测试
                target: 'xxx'
            ,
            '/pre':  //预发布
                target: 'xxx'
            ,
            '/pro':  //正式
                target: 'xxx'
            
        
    ,
    pluginOptions:  // 第三方插件配置
        // ...
    

修改sw.js路径只需要用到一个CopyWebpackPlugin,所以我这里修改的vue.config.js为:

var CopyWebpackPlugin = require('copy-webpack-plugin')
var path = require('path')

module.exports = 
  configureWebpack: 
      plugins: [
          // copy sw.js path.resolve(__dirname, ‘sw.js所在路径’)
    new CopyWebpackPlugin([
        
          from: path.resolve(__dirname, './sw.js'),
          to: path.resolve(__dirname, './dist'),
          ignore: ['.*']
          
        ])
      ]
  


public中的index.html 注册sw.js:

<script>
  if ('serviceWorker' in navigator) 
    console.log('支持sw');
    // 开始注册service workers
    navigator.serviceWorker.register('./sw.js', 
        scope: './'
    ).then(function (registration) 
        console.log('注册成功');
    ).catch (function (error) 
        console.log('注册没有成功');
    );
     else 
    console.log('不支持');
    
  </script>

再次运行代码,就OK啦!

 

在Network中查看资源:

 



作者:隔壁大胸弟
链接:https://www.jianshu.com/p/13b02169cc01
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是关于vue 中使用 Service Worker 遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

@vue/cli-plugin-pwa 没有创建 service-worker.js

VUE开发--Service Worker(五十二)

Vue.js PWA 插件在部署到子文件夹时不加载 service-worker.js (Github Pages)

在 Service Worker 中从 HTTPS 导入模块

vue PWA

使用 GWT 时找不到 Firebase Service Worker(404 错误)