欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用tree?shaking?移除無用代碼

 更新時間:2023年06月25日 14:37:17   作者:一顆冰淇淋  
這篇文章主要為大家介紹了使用tree?shaking?移除無用代碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

tree shaking 依賴于ES Module 的靜態(tài)語法分析,在項目編譯時移除無用的代碼以減少文件體積。

usedExports

在文件中,我們可能定義了變量但是暫時又沒有用到,這樣會造成空間的浪費。在 modeproduction 時,會默認做一些配置,將無用的代碼刪除。為了看到?jīng)]有做處理時編譯后的文件效果,在 webpack 中做如下配置。

module.exports = {
  // 其他配置省略
  mode: 'development',
  optimization: {
    minimize: false,
    usedExports: false,
  },
};

在這種配置情況下,當存在沒有用到的變量時,還是照原樣編譯到了 js 文件中。

useExports為false

想要移除掉 js 文件中的無用代碼,開啟 minimize 通過 usedExports 配置

module.exports = {
  // 其他配置省略
  mode: 'development',
  optimization: {
    minimize: true,
    usedExports: true,
  },
};

這樣編譯后就將沒有用到的變量 username 和 foo 函數(shù)都移除掉了

useExports為true

sideEffects

這時候仍存在一個問題,如果通過模塊化引入另一個js文件,即使沒有被使用,useExports 也不會進行 tree shaking

// index.js
import './format.js';
// format.js
export function timeFormat() {
  return '2022-01-01';
}

比如上面這段代碼,通過 import 語句引入 format.js,但 format.js 導出的函數(shù)沒有被使用。

import導入文件沒有treeShaking

此時仍然對于 import 語句進行了編譯,我們希望在引入的文件中也進行 tree shaking,刪除無用的代碼,這個時候在 package.json 中配置 sideEffects 屬性來處理。

// package.json 其他配置省略
{
    "sideEffects": false
}

sideEffects 用于告知 webapck 編譯器哪些模塊有副作用

  • 定義為 false,表示所有的模塊都不存在副作用,不需要用到的時候直接刪除
  • 定義為數(shù)組,告知有副作用的模塊,該模塊中有副作用的代碼會被保留,沒有副作用且沒有使用到的代碼會被刪除。

sideEffect為false

這樣引入的 js 文件沒有被使用,進行了 tree shaking,可是 css 資源通過 import 引入也被刪除了,也不會編譯生成對應的 css 文件,解決方式可以選擇在 sideEffects 屬性中定義數(shù)組,或者處理 css 文件的 loader 中配置(推薦)。

// package.json
{
    "sideEffects": [
        "**.css"
    ],
}
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        // 其它配置省略
        sideEffects: true,
      },
    ],
  },
};

在這種情況下,在 js 文件中引入的 css 文件就不會直接被移除掉

sideEffect保留css

PurgeCss

不過 sideEffects 屬性是不會幫助 css 文件內(nèi)部進行 tree shaking 操作的,比如沒有在代碼中創(chuàng)建 divh1 標簽,但這段 css 代碼也沒有被移除。

想要在css代碼中進行 tree shaking 可借助 purgecss-webpack-plugin。通過 npm install purgecss-webpack-plugin -D 安裝后在 package.json 中配置。

  • paths:表示要檢測哪些目錄下的內(nèi)容需要被分析
  • glob:對某些文件、文件夾通過正則表達式來進行匹配, webpack或其他插件已經(jīng)安裝過
  • noddir:表示匹配文件,不匹配文件夾
  • safelist:默認情況下,Purgecss會將html、body標簽的樣式移除掉,如果希望保留,需要在safelist中添加

這樣 css 文件內(nèi)部也會移除掉無用的代碼

PurgeCss

總結(jié)

在項目性能優(yōu)化時,可以通過 tree shaking 來做以下操作

  • optimization 中配置 usedExports 為 true,移除 js 無用代碼。
  • ( 這也是 mode 為 production 時的默認配置 )
  • package.json 中配置 sideEffects 為 false,css 在 loader 中設置 sideEffects 為 true,對模塊進行優(yōu)化。
  • 使用 PurgeCss 來對 css 文件內(nèi)部的代碼進行 tree shaking。

以上就是使用tree shaking 移除無用代碼的詳細內(nèi)容,更多關(guān)于tree shaking移除無用代碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序與公眾號卡券/會員打通的問題

    微信小程序與公眾號卡券/會員打通的問題

    這篇文章主要介紹了微信小程序與公眾號卡券/會員打通的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 微信小程序?qū)崿F(xiàn)頂部導航特效

    微信小程序?qū)崿F(xiàn)頂部導航特效

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)頂部導航特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • JS實現(xiàn)音樂鋼琴特效

    JS實現(xiàn)音樂鋼琴特效

    這篇文章主要為大家詳細介紹了JS實現(xiàn)音樂鋼琴特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • iframe自適應寬度、高度 ie6 7 8,firefox 3.86下測試通過

    iframe自適應寬度、高度 ie6 7 8,firefox 3.86下測試通過

    近期需要一個iframe自適應高度的東西,在網(wǎng)上找了很多,都不能用……一看大體的日期都是大概 2008年前后的其他近期的基本都是以前的轉(zhuǎn)載,所以只好自己動手了。
    2010-07-07
  • js實現(xiàn)簡單手風琴效果

    js實現(xiàn)簡單手風琴效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡單手風琴效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 在JavaScript中讓this保持正確的指向的解決方案

    在JavaScript中讓this保持正確的指向的解決方案

    這篇文章主要介紹了關(guān)于在 JavaScript 中如何讓 this 保持正確的指向的解決方案,文中給大家介紹了三種解決方案,使用閉包,使用箭頭函數(shù)和換綁 this這三種方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • 微信小程序前端源碼邏輯和工作流

    微信小程序前端源碼邏輯和工作流

    這篇文章主要介紹了微信小程序前端源碼邏輯和工作流 的相關(guān)資料,本文還給大家提供了文本基本結(jié)構(gòu)圖和實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • 利用JavaScript構(gòu)建樹形圖的方法詳解

    利用JavaScript構(gòu)建樹形圖的方法詳解

    ?樹形圖可視化廣泛用于分層數(shù)據(jù)分析。如果你沒有經(jīng)驗還想創(chuàng)建一個,那將會有些復雜。下面是一個詳細教程,教你如何使用JavaScript創(chuàng)建交互式樹形圖
    2022-06-06
  • layui自定義插件citySelect實現(xiàn)省市區(qū)三級聯(lián)動選擇

    layui自定義插件citySelect實現(xiàn)省市區(qū)三級聯(lián)動選擇

    這篇文章主要為大家詳細介紹了layui自定義插件citySelect實現(xiàn)省市區(qū)三級聯(lián)動選擇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • js 字符串轉(zhuǎn)換成數(shù)字的三種方法

    js 字符串轉(zhuǎn)換成數(shù)字的三種方法

    在js讀取文本框或者其它表單數(shù)據(jù)的時候獲得的值是字符串類型的,例如兩個文本框a和b,如果獲得a的value值為11,b的value值為9 ,那么a.value要小于b.value,因為他們都是字符串形式的.在網(wǎng)上找了一下js字符串轉(zhuǎn)數(shù)字的文章,這個比較全
    2013-03-03

最新評論