国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

記一次基于react、cra2、typescript的pwa項目由開發到部署(二)

Prasanta / 3183人閱讀

摘要:在上一篇文章記一次基于的項目由開發到部署一中,我們了解到了給我們提供了哪些支持,也了解到了有哪些不足。項目回顧這是一個移動端的應用,使用,,,,基于開發。可以添加到主屏幕,可以斷網條件下正常打開和訪問數據。

在上一篇文章記一次基于react、cra2、typescript的pwa項目由開發到部署(一)中,我們了解到了create-react-app 給我們提供了哪些pwa支持,也了解到了有哪些不足。雖然create-react-app會幫我們自動生成一個service-worker.js 去緩存我們的app shell,但是并沒有提供讓開發者定制service worker的方法,除非我們eject項目,這篇文章繼續往下講,把在這個項目中學到的東西分享給大家。

項目回顧

這是一個移動端的pwa應用,使用react,typescript,react-redux,react-router,workbox 基于create-react-app 開發。可以添加到主屏幕,可以斷網條件下正常打開和訪問數據。項目地址:browseExpbyReact

使用typescript

typescript是JavaScript的超級,一方面在typescript中我們可以使用最新的特性,另一方面typescript給我們帶來了類型系統,可以讓我們寫出健壯的代碼,避免一些潛在的運行時錯誤。在create-react-app中使用typescript,官網推薦我們使用的是create-react-app的ts版本,他會幫你配置好typescript的相關配置,并使用react-script-ts代替react-script來驅動項目。但是這個版本的更新會稍稍滯后于原版,而且也不利于我們擴展腳手架的配置,所以這里不推薦使用。我們使用 react-app-rewired 來進行配置。

感謝讀者提醒:October 29, 2018發布的 v2.1.0 利用bebal7 添加了對typescript的支持,現在我們只要運行 create-react-app my-app --typescript 就能夠的到typescript的支持了,可以關注以下網址關注create-react-app 的更新變動create-react-app releases
react-app-rewired

在create-react-app中修改默認配置有兩種常用的方法,

一種是 eject 項目,eject會把我們的腳手架中的配置暴露出來,然后我們就可以去修改了,但是這是一個不可逆的過程,而且講配置暴露出來也是一個不優雅的做法,所以不推薦。

第二種就是利用 react-app-rewired 去修改我們的配置,他可以讓我們在不eject項目的前提下修改我們的配置。比如配置typescript,我們可以找到對應的插件 react-app-rewire-typescript 進行配置。具體可參考本項目

利用workbox 定制自己的service worker

這里到了本文的重點:如何在create-react-app中定制自己的service-worker.js。目前的cra引用了Workbox webpack plugin 代替了先前的 sw-precache-webpack-plugin。我們可以借助 react-app-rewired
去改寫默認的Workbox webpack plugin 配置。主要步驟:

在 react-app-rewired 的配置文件 config.overrides.js 中修改 Workbox webpack plugin的配置

在public文件目錄下建立自己的service-worker配置文件

首先在 config.overrides.js 中配置,替換默認的workbox-webpack-plugin配置:

/* config-overrides.js */
// typescript的配置插件
const rewireTypescript = require("react-app-rewire-typescript");
const workboxPlugin = require("workbox-webpack-plugin")
const path = require("path")

module.exports = {
  webpack: function (config, env) {
     // typescript的配置插件
    config = rewireTypescript(config, env);
    if (env === "production") {
      // 在 ‘production’ 模式下加入自己的配置
      const workboxConfigProd = {
        swSrc: path.join(__dirname, "public", "cus-service-worker.js"),
        swDest: "cus-service-worker.js",
        importWorkboxFrom: "disabled"
      }
      // 刪除默認的WorkboxWebpackPlugin配置
      config = removePreWorkboxWebpackPluginConfig(config)
     // 加入我們的配置
      config.plugins.push(new workboxPlugin.InjectManifest(workboxConfigProd))
    }
    return config
  }
}
// 此函數用來找出 默認配置中的 WorkboxWebpackPlugin, 并把它刪除
function removePreWorkboxWebpackPluginConfig (config) {
  const preWorkboxPluginIndex = config.plugins.findIndex((element) => {
    return Object.getPrototypeOf(element).constructor.name === "GenerateSW"
  })
  if (preWorkboxPluginIndex !== -1) {
    config.plugins.splice(preWorkboxPluginIndex, 1)
  }
  return config
}

這部分的配置大概意思就是,當環境為生成環境時,找出webpack中關于workbox-webpack-plugin的配置,把它刪掉,然后用自己的配置替代它。

這里解釋一下 removePreWorkboxWebpackPluginConfig 這個函數。我們可以自己用create-react-app新建一個無用的項目,然后eject它,那么我們可以在暴露出來的config文件夾下的 webpack.config.prod.js 中看到關于 workbox-webpack-plugin 的配置

new WorkboxWebpackPlugin.GenerateSW({
      clientsClaim: true,
      exclude: [/.map$/, /asset-manifest.json$/],
      importWorkboxFrom: "cdn",
      navigateFallback: publicUrl + "/index.html",
      navigateFallbackBlacklist: [
        // Exclude URLs starting with /_, as they"re likely an API call
        new RegExp("^/_"),
        // Exclude URLs containing a dot, as they"re likely a resource in
        // public/ and not a SPA route
        new RegExp("/[^/]+.[^/]+$"),
      ],
    }),

所以我們可以通過下面這段代碼找到這段配置的位置:

// 對plugins數組調用findIndex方法,找到構造函數的name屬性為‘GenerateSW’的成員
const preWorkboxPluginIndex = config.plugins.findIndex((element) => {
    return Object.getPrototypeOf(element).constructor.name === "GenerateSW"
  })
// 刪除這個成員
  if (preWorkboxPluginIndex !== -1) {
    config.plugins.splice(preWorkboxPluginIndex, 1)
  }

替換掉workbox-webpack-plugin的配置后,根據自己的配置在public目錄下新建cus-service-worker.js文件,這個文件會代替默認生成的service-worker.js文件,我們就可以通過配置cus-service-worker.js來定制自己的pwa配置了,而且cus-service-worker.js 里的內容也是有講究的,以本項目為例:

// 引入workbox全局變量
importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js");

if (workbox) {
  console.log(`Yay! Workbox is loaded            
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98836.html

相關文章

  • 一次基于reactcra2typescriptpwa項目開發部署(三)

    摘要:配置反向代理我們的項目已經在服務器上的端口運行著,所以我們需要配置一個反向代理,將我們對服務器的訪問反向代理到服務器的。 該篇文章為本系列最后一篇文章,因為最近樓主忙于畢設,所以這也是一篇被鴿了很久很久的文章。該文章主要講的是該項目的部署部分,包括: 如何部署將該項目部署到nginx服務器上。 為它配置證書,讓它運行在https協議上等。 項目回顧 這是一個基于creat-reac...

    Betta 評論0 收藏0
  • 2017前端發展回顧

    摘要:前端開發在年依然持續火熱,本文將對熱點事件做一個總結。版的和協議在前端領域,一直獨占鰲頭。年又發布了一個重大的版本更新。主要是配合使用了服務工作線程。而且還提供了供前端開發者接入。快速發布了和在悄悄地跳過之后,在月號正式發布。 譯者按: 老技術日趨成熟,新技術層出不窮。 原文: A recap of front-end development in 2017 譯者: Fundebu...

    lmxdawn 評論0 收藏0
  • 2018前端值得關注技術

    摘要:年前端有哪些領域,技術值得關注,哪些技術會興起,哪些技術會沒落。自從谷歌提出后,就持續的獲得了業界的關注,熱度可見一斑。就在今年,谷歌也宣布將獲得與安卓原生應用同等的待遇與權限。但是無論都值得關注。 1.前言 2017悄然過去,2018已經來到。人在進步,技術在發展。2018年前端有哪些領域,技術值得關注,哪些技術會興起,哪些技術會沒落。下面就我個人的判斷進行一個預測判斷,希望能對大家...

    xiao7cn 評論0 收藏0
  • 2018前端值得關注技術

    摘要:年前端有哪些領域,技術值得關注,哪些技術會興起,哪些技術會沒落。自從谷歌提出后,就持續的獲得了業界的關注,熱度可見一斑。就在今年,谷歌也宣布將獲得與安卓原生應用同等的待遇與權限。但是無論都值得關注。 1.前言 2017悄然過去,2018已經來到。人在進步,技術在發展。2018年前端有哪些領域,技術值得關注,哪些技術會興起,哪些技術會沒落。下面就我個人的判斷進行一個預測判斷,希望能對大家...

    用戶84 評論0 收藏0
  • 前端每周清單第 45 期: Safari 支持 Service Worker, Parcel 完整教

    摘要:的另一個核心特性,蘋果表示也正在開發中,按開發進度可能幾個月后就能與我們見面。是基于的本地化數據庫,支持以及瀏覽器環境。 前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點;分為新聞熱點、開發教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡迎關注【前端之巔】微信公眾號(ID: frontshow),及時獲取前端每周清單。 本期是 2017 年的最后一...

    趙春朋 評論0 收藏0

發表評論

0條評論

Prasanta

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<