在Webpack 5 中如何進行 CSS 常用配置?

来源:https://www.cnblogs.com/youyacoder/archive/2022/07/27/16525752.html
-Advertisement-
Play Games

本文摘要:主要通過實操講解運用Webpack 5 CSS常用配置的方法步驟 前文已談到可以通過配置 css-loader 和 style-loader,使 webpack5 具有處理 CSS 資源的能力。css-loader 首先會分析出各個 CSS文件之間的關係,把各個CSS文件合併為一大段 CS ...


本文摘要:主要通過實操講解運用Webpack 5 CSS常用配置的方法步驟

前文已談到可以通過配置 css-loaderstyle-loader,使 webpack5 具有處理 CSS 資源的能力。css-loader 首先會分析出各個 CSS文件之間的關係,把各個CSS文件合併為一大段 CSS,然後將 CSS 文件編譯為 CommonJS 模塊,並把該模塊引入到 JS 中。緊接著 style-loader 會從 JS 中提取出剛纔引入的編譯後的 CSS,在頁面的 header 中創建 style 標簽,並插入該css。

1 提取 CSS 文件

上述配置打包後的資源,在瀏覽器中運行時,首先會載入 JS 文件,之後才會創建 style 標簽來插入樣式,很多情況下會出現閃屏現場,導致用戶體驗不好。這時候可通過配置 mini-css-extract-plugin 插件來提升用戶體驗,該插件可以提取出獨立的 CSS 文件,通過 link 標簽載入樣式。

插件官網:https://webpack.js.org/plugins/mini-css-extract-plugin/

1.1 安裝依賴

安裝 mini-css-extract-plugin 為開發依賴:

yarn add mini-css-extract-plugin -D

1.2 修改 webpack 配置

修改 webpack.config.js 文件:

1)引入插件:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

2)修改 loader 配置:將 module.rules 中所有 style-loader 替換為該插件提供的loader:MiniCssExtractPlugin.loader,如:

//...
module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader'
      ]
    },
    {
      test: /\.s[ca]ss$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'sass-loader',
      ]
    },
    {
      test: /\.less$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'less-loader',
      ]
    },
    {
      test: /\.styl$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'stylus-loader'
      ]
    },
//...
  ]
},
//...

3)添加插件配置:在 plugins 中添加該插件

  plugins: [
// ...
    new MiniCssExtractPlugin({
      filename: 'css/index.css'
    })
  ],

1.3 測試運行

執行 yarn build 打包,打包成功後:

1)查看輸出目錄 dist,該目錄中新增了 css/index.css

2)在瀏覽器中運行 dist/index.html,在 Elements中可看到 link 標簽引入 css/index.css 文件:

image-20220717214549251

2 CSS 相容性處理

由於瀏覽器碎片化嚴重,需要進行 CSS 相容性的處理。如果手動編寫各種相容樣式,工作量較大,可使用 postcss-loader 來實現 CSS 的相容性。官網:https://webpack.js.org/loaders/postcss-loader/#autoprefixer

2.1 安裝依賴

postcss-loader 依賴於 postcss。post-css 有大量的配置,我們可以使用它的預設 postcss-preset-env,該預設包括了 autoprefixer等。

yarn add postcss-loader postcss postcss-preset-env -D

2.2 修改 webpack 配置

1)在 webpack.config.js 中定義通用的 postcss-loader 配置:

const commonPostcssLoader = {
  loader: 'postcss-loader',
  options: {
    postcssOptions: {
      plugins: [
        'postcss-preset-env'
      ]
    }
  }
}

2)在每個css相關的loader配置中添加上面定義的loader。註意,上面定義的 commonPostcssLoader 需要在 css-loader 之前執行,在 css 預處理器的loader(sass-loader / less-loader / stylus-loader)之後執行:

  rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader
        ]
      },
      {
        test: /\.s[ca]ss$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'sass-loader',
        ]
      },
      {
        test: /\.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'less-loader',
        ]
      },
      {
        test: /\.styl$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'stylus-loader'
        ]
      },
// ...
    ]

2.3 添加 .browserslistrc 文件

在項目根目錄下創建 .browserslistrc 文件,該文件告訴 postcss-loader 需要支持的瀏覽器。可以在控制臺中執行命令 npx browserslist 查看瀏覽器版本:

image-20220717230813678

在實踐中,.browserslistrc 我通常寫如下內容:

> 1%
last 10 version
not dead

上述配置表示:占有率大於1%、並且最新的10個版本、並且存在的瀏覽器。

為了測試 CSS 相容性,此處暫時將該文件內容修改為占有率大於0.001:

> 0.001%

2.4 測試運行

1)在 src/style/css/css-demo.css 文件中添加一個需要相容性處理的 css 代碼:

h1 {
  border-radius: 10px;
}

2)執行打包命令 yarn build (對應為 webpack 命令)

3)打包成功,查看生成的 dist/css/index.css 文件,可發現做了相容性處理:

image-20220717231659103

3 CSS 壓縮處理

上面打包後提取出來的 index.css 並沒有進行壓縮,通常在生產環境儘量要壓縮文件。webpack 提供了插件 css-minimizer-webpack-plugin 壓縮 CSS 文件。

官網:https://webpack.js.org/plugins/css-minimizer-webpack-plugin

3.1 安裝依賴

yarn add css-minimizer-webpack-plugin -D

3.2 修改 webpack 配置

1)引入插件

const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')

2)在 plugins 中添加插件

  plugins: [
// ....
    new CssMinimizerWebpackPlugin()
  ],

3.3 測試運行

執行打包命令 yarn build,查看打包生成的 dist/css/index.css 文件,可看到該文件已經被壓縮。

今日優雅哥(youyacoder)學習結束,期待關註留言分享~~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、行轉列 源數據: 目標數據: 數據準備 -- 建表插入數據 drop table if exists time_temp; create table if not exists time_temp( `year_col` int not null comment '年份', `month_col ...
  • 2022年7月26日,Taier1.2版本正式發佈! 本次版本發佈更新功能: 新增工作流 新增OceanBase SQL 新增Flink jar任務 數據同步、實時採集支持臟數據管理 Hive UDF 控制台UI升級 租戶綁定簡化 新版本的使用文檔已在社區中推送,大家可以隨時下載查閱,歡迎大家體驗新 ...
  • 現如今 Redis 變得越來越流行,幾乎在很多項目中都要被用到,不知道你在使用 Redis 時,有沒有思考過,Redis 到底是如何穩定、高性能地提供服務的? 我使用 Redis 的場景很簡單,只使用單機版 Redis 會有什麼問題嗎? 我的 Redis 故障宕機了,數據丟失了怎麼辦?如何能保證我的... ...
  • 實戰案例 1.搭建mysql服務 下載mysql [root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm [root@localhost ~]# rpm -Uvh my ...
  • 四大組件 Activity 實現步驟 繼承 Activity 或其子類,實現以下方法: //第一次創建時回調 protected void onCreate(Bundle savedInstanceState); //啟動時回調 protected void onStart(); //再次啟動時回調 ...
  • 前言: ​ 從64位開始,iOS引入了Tagged Pointer技術,用於優化NSNumber、NSDate、NSString等小對象的存儲。 Tagged Pointer主要為瞭解決兩個問題: 記憶體資源浪費,堆區需要額外的開闢空間 訪問效率,每次set/get都需要訪問堆區,浪費時間, 而且需要 ...
  • HMS Core音頻編輯服務(Audio Editor Kit)6.6.0版本上線,新增歌聲合成能力。通過歌詞和曲調,結合不同的曲風讓機器也能生成真實度極高的歌聲。支持字級別輸入歌詞進行音素轉換,生成對應歌詞的歌聲,可靈活調整音高、滑音、呼吸音、顫音等細節參數,讓歌聲更真實。 歌聲合成服務可廣泛應用 ...
  • HTML 一、認識HTML 什麼是HTML? HTML 是用來描述網頁的一種語言 HTML 指的是超文本標記語言: HyperText Markup Language HTML 不是一種編程語言,而是一種標記語言 標記語言是一套標記標簽 (markup tag) HTML 使用標記標簽來描述網頁 H ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...