使用 firebase.auth().signInWithPopup(firebase.auth.GoogleAuthProvider()) 时,弹出窗口会打开,但不会重定向到 account.google 登录页面,而是转到页面找不到我的应用程序的路径。我相信这与通过 offline-plugin 完成的服务 worker 有关。 。这是内置于 React-boilerplate 中的,该项目使用的是v3。我也在使用react-redux-firebase总体来说效果很好,所以我不认为这是设置的问题。

Webpack 产品文件

// Important modules this config uses 
const path = require('path'); 
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const WebpackPwaManifest = require('webpack-pwa-manifest'); 
const OfflinePlugin = require('offline-plugin'); 
const { HashedModuleIdsPlugin } = require('webpack'); 
const TerserPlugin = require('terser-webpack-plugin'); 
const CompressionPlugin = require('compression-webpack-plugin'); 
 
module.exports = require('./webpack.base.babel')({ 
  mode: 'production', 
 
  // In production, we skip all hot-reloading stuff 
  entry: [ 
    require.resolve('react-app-polyfill/ie11'), 
    path.join(process.cwd(), 'app/app.js'), 
  ], 
 
  // Utilize long-term caching by adding content hashes (not compilation hashes) to compiled assets 
  output: { 
    filename: '[name].[chunkhash].js', 
    chunkFilename: '[name].[chunkhash].chunk.js', 
  }, 
 
  optimization: { 
    minimize: true, 
    minimizer: [ 
      new TerserPlugin({ 
        terserOptions: { 
          warnings: false, 
          compress: { 
            comparisons: false, 
          }, 
          parse: {}, 
          mangle: true, 
          output: { 
            comments: false, 
            ascii_only: true, 
          }, 
        }, 
        parallel: true, 
        cache: true, 
        sourceMap: true, 
      }), 
    ], 
    nodeEnv: 'production', 
    sideEffects: true, 
    concatenateModules: true, 
    splitChunks: { 
      chunks: 'all', 
      minSize: 30000, 
      minChunks: 1, 
      maxAsyncRequests: 5, 
      maxInitialRequests: 3, 
      name: true, 
      cacheGroups: { 
        commons: { 
          test: /[\\/]node_modules[\\/]/, 
          name: 'vendor', 
          chunks: 'all', 
        }, 
        main: { 
          chunks: 'all', 
          minChunks: 2, 
          reuseExistingChunk: true, 
          enforce: true, 
        }, 
      }, 
    }, 
    runtimeChunk: true, 
  }, 
 
  plugins: [ 
    // Minify and optimize the index.html 
    new HtmlWebpackPlugin({ 
      template: 'app/index.html', 
      minify: { 
        removeComments: true, 
        collapseWhitespace: true, 
        removeRedundantAttributes: true, 
        useShortDoctype: true, 
        removeEmptyAttributes: true, 
        removeStyleLinkTypeAttributes: true, 
        keepClosingSlash: true, 
        minifyJS: true, 
        minifyCSS: true, 
        minifyURLs: true, 
      }, 
      inject: true, 
    }), 
 
    // Put it in the end to capture all the HtmlWebpackPlugin's 
    // assets manipulations and do leak its manipulations to HtmlWebpackPlugin 
    new OfflinePlugin({ 
      relativePaths: false, 
      publicPath: '/', 
      appShell: '/', 
 
      // No need to cache .htaccess. See http://mxs.is/googmp, 
      // this is applied before any match in `caches` section 
      excludes: ['.htaccess'], 
 
      caches: { 
        main: [':rest:'], 
 
        // All chunks marked as `additional`, loaded after main section 
        // and do not prevent SW to install. Change to `optional` if 
        // do not want them to be preloaded at all (cached only when first loaded) 
        additional: ['*.chunk.js'], 
      }, 
 
      // Removes warning for about `additional` section usage 
      safeToUseOptionalCaches: true, 
    }), 
 
    new CompressionPlugin({ 
      algorithm: 'gzip', 
      test: /\.js$|\.css$|\.html$/, 
      threshold: 10240, 
      minRatio: 0.8, 
    }), 
 
    new WebpackPwaManifest({ 
      name: 'Applied Charts', 
      short_name: 'AW Charts', 
      description: 'A bespoke chart builder to streamline workflows', 
      background_color: '#fafafa', 
      theme_color: '#b1624d', 
      inject: true, 
      ios: true, 
      // icons: [ 
      //   { 
      //     src: path.resolve('app/images/icon-512x512.png'), 
      //     sizes: [72, 96, 128, 144, 192, 384, 512], 
      //   }, 
      //   { 
      //     src: path.resolve('app/images/icon-512x512.png'), 
      //     sizes: [120, 152, 167, 180], 
      //     ios: true, 
      //   }, 
      // ], 
    }), 
 
    new HashedModuleIdsPlugin({ 
      hashFunction: 'sha256', 
      hashDigest: 'hex', 
      hashDigestLength: 20, 
    }), 
  ], 
 
  performance: { 
    assetFilter: assetFilename => 
      !/(\.map$)|(^(main\.|favicon\.))/.test(assetFilename), 
  }, 
}); 
 

路由器目前只有两条路由 App.js

export default function App() { 
  return ( 
    <div> 
      <Switch> 
        <Route exact path="/" component={HomePage} /> 
        <Route component={NotFoundPage} /> 
      </Switch> 
      <GlobalStyle /> 
    </div> 
  ); 
} 

任何帮助将不胜感激。

请您参考如下方法:

您的问题是与 offline-plugin 相关的已记录错误。您可以在此处查看问题日志:https://github.com/NekR/offline-plugin/issues/412

您的 Service Worker 确实正在窃取对 _auth 的请求。如果您的问题对时间不敏感,您可能会等待该项目修复问题并提取更新,尽管此问题自 2018 年以来一直处于开放状态。否则,您可以手动向服务工作人员获取添加豁免。

在此回答时,线程中最有可能成功的评论建议使用以下代码,这可能会解决该问题:

new RemoveServiceWorkerPlugin({ filename: 'sw.js' }); 
 
new OfflinePlugin({ 
      relativePaths: false, 
      publicPath: '/', 
      appShell: '/', 
 
      ServiceWorker: { 
        output: 'newsw.js', 
        events: true, 
        navigateFallbackURL: '/', 
      }, 
 
      excludes: ['.htaccess', '*/__/auth*/{*.*,.*}'], 

最终,您需要找到一种方法来从 Service Worker 的处理中排除 __/auth 路径,事情应该没问题。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!