From 978c61baa57cd425ffcb4d4ac121e9c738a5a930 Mon Sep 17 00:00:00 2001 From: jas0ncn Date: Mon, 24 Sep 2018 23:30:15 +0800 Subject: [PATCH] Update: pull merge --- configs/webpack/common.js | 26 ++-- configs/webpack/dev.js | 20 ++- configs/webpack/prod.js | 18 ++- package-lock.json | 301 ++++++++++++++++++++++++++++++++++++-- package.json | 4 +- src/index.ts | 19 +++ 6 files changed, 364 insertions(+), 24 deletions(-) diff --git a/configs/webpack/common.js b/configs/webpack/common.js index 7591b16..2564bc0 100644 --- a/configs/webpack/common.js +++ b/configs/webpack/common.js @@ -3,15 +3,14 @@ const { resolve } = require('path') const { CheckerPlugin, TsConfigPathsPlugin } = require('awesome-typescript-loader') const StyleLintPlugin = require('stylelint-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') +const OfflinePlugin = require('offline-plugin') module.exports = { resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx', '.scss'], - plugins: [ - new TsConfigPathsPlugin() - ], + plugins: [new TsConfigPathsPlugin()], alias: { - '@styles': resolve(__dirname, 'src/styles/') + '@styles': resolve(__dirname, 'src/styles/'), }, }, context: resolve(__dirname, '../../src'), @@ -32,11 +31,7 @@ module.exports = { }, { test: /\.scss$/, - loaders: [ - 'style-loader', - { loader: 'css-loader', options: { importLoaders: 1 } }, - 'sass-loader', - ], + loaders: ['style-loader', { loader: 'css-loader', options: { importLoaders: 1 } }, 'sass-loader'], }, { test: /\.(jpe?g|png|gif|svg)$/i, @@ -50,10 +45,19 @@ module.exports = { plugins: [ new CheckerPlugin(), new StyleLintPlugin(), - new HtmlWebpackPlugin({ template: 'index.html.ejs', }), + new HtmlWebpackPlugin({ template: 'index.html.ejs' }), + new OfflinePlugin({ + ServiceWorker: { + events: true, + }, + externals: [ + 'https://cdnjs.cloudflare.com/ajax/libs/react/16.4.2/umd/react.production.min.js', + 'https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.2/umd/react-dom.production.min.js', + ], + }), ], externals: { - 'react': 'React', + react: 'React', 'react-dom': 'ReactDOM', }, performance: { diff --git a/configs/webpack/dev.js b/configs/webpack/dev.js index 2af8ef9..692e19b 100644 --- a/configs/webpack/dev.js +++ b/configs/webpack/dev.js @@ -1,15 +1,17 @@ // development config const merge = require('webpack-merge') const webpack = require('webpack') +const { resolve } = require('path') +const ManifestPlugin = require('webpack-pwa-manifest') const commonConfig = require('./common') module.exports = merge(commonConfig, { mode: 'development', entry: [ 'react-hot-loader/patch', // activate HMR for React - 'webpack-dev-server/client?http://localhost:8080',// bundle the client for webpack-dev-server and connect to the provided endpoint + 'webpack-dev-server/client?http://localhost:8080', // bundle the client for webpack-dev-server and connect to the provided endpoint 'webpack/hot/only-dev-server', // bundle the client for hot reloading, only- means to only hot reload for successful updates - './index.ts' // the entry point of our app + './index.ts', // the entry point of our app ], devServer: { hot: true, // enable HMR on the server @@ -19,5 +21,19 @@ module.exports = merge(commonConfig, { plugins: [ new webpack.HotModuleReplacementPlugin(), // enable HMR globally new webpack.NamedModulesPlugin(), // prints more readable module names in the browser console on HMR updates + new ManifestPlugin({ + name: 'Clash Development', + background_color: '#FFFFFF', + crossorigin: 'anonymous', + inject: true, + fingerprints: false, + icons: [ + { + src: resolve('src/assets/logo.png'), + sizes: [96, 128, 192, 256], + destination: 'img/icons', + }, + ], + }), ], }) diff --git a/configs/webpack/prod.js b/configs/webpack/prod.js index 2d9a3ad..6462257 100644 --- a/configs/webpack/prod.js +++ b/configs/webpack/prod.js @@ -1,6 +1,7 @@ // production config const merge = require('webpack-merge') const { resolve } = require('path') +const ManifestPlugin = require('webpack-pwa-manifest') const commonConfig = require('./common') @@ -13,5 +14,20 @@ module.exports = merge(commonConfig, { publicPath: '/', }, devtool: 'source-map', - plugins: [], + plugins: [ + new ManifestPlugin({ + name: 'Clash', + background_color: '#FFFFFF', + crossorigin: 'anonymous', + inject: true, + fingerprints: false, + icons: [ + { + src: resolve('src/assets/logo.png'), + sizes: [96, 128, 192, 256], + destination: 'img/icons', + }, + ], + }), + ], }) diff --git a/package-lock.json b/package-lock.json index cdfe6d7..9c2e16e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1636,6 +1636,12 @@ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", "dev": true }, + "bignumber.js": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/bignumber.js/download/bignumber.js-2.4.0.tgz", + "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", + "dev": true + }, "bin-build": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", @@ -1757,6 +1763,12 @@ "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==", "dev": true }, + "bmp-js": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/bmp-js/download/bmp-js-0.0.3.tgz", + "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=", + "dev": true + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -1847,7 +1859,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -1884,7 +1896,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -1960,6 +1972,12 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/buffer-equal/download/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -2605,7 +2623,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -2618,7 +2636,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -2660,6 +2678,12 @@ "randomfill": "^1.0.3" } }, + "css-color-names": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, "css-loader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", @@ -3247,7 +3271,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -3483,6 +3507,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "ejs": { + "version": "2.6.1", + "resolved": "http://registry.npm.taobao.org/ejs/download/ejs-2.6.1.tgz", + "integrity": "sha1-SY7A1JVlWrxvI81hho2SZGQHGqA=", + "dev": true + }, "electron-to-chromium": { "version": "1.3.62", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.62.tgz", @@ -3605,6 +3635,12 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", @@ -3756,6 +3792,12 @@ "meow": "^3.1.0" } }, + "exif-parser": { + "version": "0.1.12", + "resolved": "http://registry.npm.taobao.org/exif-parser/download/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -4258,6 +4300,15 @@ } } }, + "for-each": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/for-each/download/for-each-0.3.3.tgz", + "integrity": "sha1-abRH6IoKXTLD5whPPxcQA0shN24=", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -6402,6 +6453,12 @@ "number-is-nan": "^1.0.0" } }, + "is-function": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-function/download/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", + "dev": true + }, "is-gif": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", @@ -6679,6 +6736,44 @@ "is-object": "^1.0.1" } }, + "jimp": { + "version": "0.2.28", + "resolved": "http://registry.npm.taobao.org/jimp/download/jimp-0.2.28.tgz", + "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "dev": true, + "requires": { + "bignumber.js": "^2.1.0", + "bmp-js": "0.0.3", + "es6-promise": "^3.0.2", + "exif-parser": "^0.1.9", + "file-type": "^3.1.0", + "jpeg-js": "^0.2.0", + "load-bmfont": "^1.2.3", + "mime": "^1.3.4", + "mkdirp": "0.5.1", + "pixelmatch": "^4.0.0", + "pngjs": "^3.0.0", + "read-chunk": "^1.0.1", + "request": "^2.65.0", + "stream-to-buffer": "^0.1.0", + "tinycolor2": "^1.1.2", + "url-regex": "^3.0.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "jpeg-js": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/jpeg-js/download/jpeg-js-0.2.0.tgz", + "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=", + "dev": true + }, "js-base64": { "version": "2.4.9", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", @@ -6818,6 +6913,22 @@ "invert-kv": "^1.0.0" } }, + "load-bmfont": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/load-bmfont/download/load-bmfont-1.4.0.tgz", + "integrity": "sha1-dfFwcLFKjHhf5/W+4ub9T5gJO2s=", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -7716,7 +7827,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -8018,6 +8129,45 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, + "offline-plugin": { + "version": "5.0.5", + "resolved": "http://registry.npm.taobao.org/offline-plugin/download/offline-plugin-5.0.5.tgz", + "integrity": "sha1-6bFsVp0ZiZr5ySP1vCYHBVeP/ro=", + "dev": true, + "requires": { + "deep-extend": "^0.5.1", + "ejs": "^2.3.4", + "loader-utils": "0.2.x", + "minimatch": "^3.0.3", + "slash": "^1.0.0" + }, + "dependencies": { + "deep-extend": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.5.1.tgz", + "integrity": "sha1-uJSp3ZDTAj+/HFWjlPuFjrIGbx8=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -8257,7 +8407,7 @@ }, "parse-asn1": { "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { @@ -8268,6 +8418,28 @@ "pbkdf2": "^3.0.3" } }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-ascii/download/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-binary/download/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-xml/download/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha1-AVMZeX4+EvnnOcTVE4cs0vo184k=", + "dev": true, + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, "parse-entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", @@ -8311,6 +8483,16 @@ } } }, + "parse-headers": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/parse-headers/download/parse-headers-2.0.1.tgz", + "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "dev": true, + "requires": { + "for-each": "^0.3.2", + "trim": "0.0.1" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -8419,6 +8601,12 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "phin": { + "version": "2.9.2", + "resolved": "http://registry.npm.taobao.org/phin/download/phin-2.9.2.tgz", + "integrity": "sha1-CoLVtt11VStmXzcfgGBonBr3M24=", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -8438,6 +8626,15 @@ "pinkie": "^2.0.0" } }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/pixelmatch/download/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dev": true, + "requires": { + "pngjs": "^3.0.0" + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -8447,6 +8644,12 @@ "find-up": "^2.1.0" } }, + "pngjs": { + "version": "3.3.3", + "resolved": "http://registry.npm.taobao.org/pngjs/download/pngjs-3.3.3.tgz", + "integrity": "sha1-hRc3A73j7ayJmHV7luWCHQlmohs=", + "dev": true + }, "pngquant-bin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-4.0.0.tgz", @@ -9180,7 +9383,7 @@ }, "public-encrypt": { "version": "4.0.2", - "resolved": "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { @@ -9482,6 +9685,12 @@ "readable-stream": "^2.0.0" } }, + "read-chunk": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-chunk/download/read-chunk-1.0.1.tgz", + "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", + "dev": true + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -10124,7 +10333,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -10658,6 +10867,21 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "stream-to": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/stream-to/download/stream-to-0.2.2.tgz", + "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", + "dev": true + }, + "stream-to-buffer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/stream-to-buffer/download/stream-to-buffer-0.1.0.tgz", + "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", + "dev": true, + "requires": { + "stream-to": "~0.2.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -11544,6 +11768,12 @@ "setimmediate": "^1.0.4" } }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "dev": true + }, "to-absolute-glob": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", @@ -13210,6 +13440,25 @@ "lodash": "^4.17.5" } }, + "webpack-pwa-manifest": { + "version": "3.7.1", + "resolved": "http://registry.npm.taobao.org/webpack-pwa-manifest/download/webpack-pwa-manifest-3.7.1.tgz", + "integrity": "sha1-7zykVxsfeZpHAiW+U3wMpqGslQU=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "jimp": "^0.2.28", + "mime": "^1.6.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true + } + } + }, "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", @@ -13312,6 +13561,40 @@ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "dev": true }, + "xhr": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/xhr/download/xhr-2.5.0.tgz", + "integrity": "sha1-vtjRZ21co2EIZnaSt0sxbEluSd0=", + "dev": true, + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/xml-parse-from-string/download/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/xml2js/download/xml2js-0.4.19.tgz", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "http://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", diff --git a/package.json b/package.json index fe726d2..b502ea8 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "file-loader": "^2.0.0", "html-webpack-plugin": "^3.2.0", "image-webpack-loader": "^4.3.1", + "offline-plugin": "^5.0.5", "react-addons-test-utils": "^15.6.2", "react-hot-loader": "^4.3.11", "sass-loader": "^7.1.0", @@ -55,7 +56,8 @@ "webpack-cli": "^3.1.1", "webpack-dev-middleware": "^3.3.0", "webpack-dev-server": "^3.1.8", - "webpack-merge": "^4.1.4" + "webpack-merge": "^4.1.4", + "webpack-pwa-manifest": "^3.7.1" }, "dependencies": { "classnames": "^2.2.6", diff --git a/src/index.ts b/src/index.ts index e6c277d..c750355 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import renderApp from './render' import { isClashX, setupJsBridge } from '@lib/jsBridge' +import * as OfflinePluginRuntime from 'offline-plugin/runtime' /** * Global entry @@ -10,3 +11,21 @@ if (isClashX()) { } else { renderApp() } + +// PWA install +OfflinePluginRuntime.install({ + onUpdateReady: () => { + console.log('SW Event:', 'onUpdateReady') + // Tells to new SW to take control immediately + OfflinePluginRuntime.applyUpdate() + }, + onUpdated: () => { + console.log('SW Event:', 'onUpdated') + // Reload the webpage to load into the new version + window.location.reload() + }, + + onUpdateFailed: () => { + console.error('SW Event:', 'onUpdateFailed') + }, +})