用户界面-如何在React应用程序中为Progressive Web应用程序创建缓存的应用程序外壳



目前,我使用webpack构建一个代表我的应用程序的JS文件。如何将我的React应用程序UI外壳与其他应用程序逻辑分离,以便让Worker服务缓存它?

我的webpackpack配置文件如下所示,它生成一个单独的index_bundle.js文件(没有css文件(:

import webpack from 'webpack'
import path from 'path'
import HtmlWebpackPlugin from 'html-webpack-plugin'
import autoprefixer from 'autoprefixer'
const LAUNCH_COMMAND = process.env.npm_lifecycle_event
const isProduction = LAUNCH_COMMAND === 'production'
process.env.BABEL_ENV = LAUNCH_COMMAND
const PATHS = {
  root: path.join(__dirname),
  app: path.join(__dirname, 'app'),
  build: path.join(__dirname, 'dist')
}
const HTMLWebpackPluginConfig = new HtmlWebpackPlugin({
  template: PATHS.app + '/index.html',
  filename: 'index.html',
  inject: 'body'
})
const productionPlugin = new webpack.DefinePlugin({
  'process.env': {
    NODE_ENV: JSON.stringify('production')
  }
})
const productionPlugin2 = new webpack.optimize.UglifyJsPlugin({
  compressor: {
    warnings: false
  }
})
const base = {
  entry: [
    'babel-polyfill',
    PATHS.app
  ],
  output: {
    path: PATHS.build,
    filename: 'index_bundle.js'
  },
  module: {
    loaders: [
      {test: /.js$/, exclude: /node_modules/, loader: 'babel-loader'},
      {test: /.css$/, loader: 'style!css?sourceMap&modules&localIdentName=[name]__[local]___[hash:base64:5]&importLoader=1!postcss'}
    ]
  },
  postcss: [ autoprefixer({ browsers: ['last 2 versions'] }) ],
  resolve: {
    root: path.resolve('./app')
  }
}
const developmentConfig = {
  devtool: 'cheap-module-inline-source-map',
  devServer: {
    contentBase: PATHS.build,
    historyApiFallback: true,
    hot: true,
    inline: true,
    progress: true
  },
  plugins: [HTMLWebpackPluginConfig, new webpack.HotModuleReplacementPlugin()]
}
const productionConfig = {
  devtool: 'cheap-module-source-map',
  plugins: [HTMLWebpackPluginConfig, productionPlugin, productionPlugin2]
}
export default Object.assign({}, base, isProduction === true ? productionConfig : developmentConfig)

我在2015年Chrome开发者峰会上的"与服务人员的即时加载"演讲涵盖了使用由React提供支持的AppShell+动态模型创建PWA。

它的代码示例是sw-precache库repo的一部分:https://github.com/GoogleChrome/sw-precache/tree/master/app-shell-demo

(它不一定是世界上最惯用的React代码,但一般概念,尤其是在服务工作者实现方面,应该适用。(

相关内容

  • 没有找到相关文章

最新更新