最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用tree?shaking?移除無(wú)用代碼

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

正文

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

usedExports

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

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

在這種配置情況下,當(dāng)存在沒(méi)有用到的變量時(shí),還是照原樣編譯到了 js 文件中。

useExports為false

想要移除掉 js 文件中的無(wú)用代碼,開(kāi)啟 minimize 通過(guò) usedExports 配置

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

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

useExports為true

sideEffects

這時(shí)候仍存在一個(gè)問(wèn)題,如果通過(guò)模塊化引入另一個(gè)js文件,即使沒(méi)有被使用,useExports 也不會(huì)進(jìn)行 tree shaking。

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

比如上面這段代碼,通過(guò) import 語(yǔ)句引入 format.js,但 format.js 導(dǎo)出的函數(shù)沒(méi)有被使用。

import導(dǎo)入文件沒(méi)有treeShaking

此時(shí)仍然對(duì)于 import 語(yǔ)句進(jìn)行了編譯,我們希望在引入的文件中也進(jìn)行 tree shaking,刪除無(wú)用的代碼,這個(gè)時(shí)候在 package.json 中配置 sideEffects 屬性來(lái)處理。

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

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

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

sideEffect為false

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

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

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

sideEffect保留css

PurgeCss

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

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

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

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

PurgeCss

總結(jié)

在項(xiàng)目性能優(yōu)化時(shí),可以通過(guò) tree shaking 來(lái)做以下操作

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

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

相關(guān)文章

  • 解析Json字符串的三種方法日常常用

    解析Json字符串的三種方法日常常用

    下面將介紹日常中使用的三種解析json字符串的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • 原生js封裝的一些jquery方法(詳解)

    原生js封裝的一些jquery方法(詳解)

    下面小編就為大家?guī)?lái)一篇原生js封裝的一些jquery方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • JS 的應(yīng)用開(kāi)發(fā)初探(mootools)

    JS 的應(yīng)用開(kāi)發(fā)初探(mootools)

    昨天在公司內(nèi)部做了一個(gè)小小的技術(shù)分享,就 js 應(yīng)用開(kāi)發(fā)方面跟大家談了一點(diǎn)自己的心得,最近因?yàn)楣ぷ麝P(guān)系花在這上面的時(shí)間較多也頗有些收獲,寫在這里備忘。
    2009-12-12
  • javascript CSS畫(huà)圖之基礎(chǔ)篇

    javascript CSS畫(huà)圖之基礎(chǔ)篇

    要在瀏覽器上動(dòng)態(tài)地畫(huà)圖(矢量圖),個(gè)人覺(jué)得矢量圖中最關(guān)鍵的兩點(diǎn).
    2009-07-07
  • js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法

    js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法

    下面小編就為大家?guī)?lái)一篇js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • javascript動(dòng)態(tài)加載三

    javascript動(dòng)態(tài)加載三

    首先是通過(guò)同步策略來(lái)實(shí)現(xiàn)模塊加載與回調(diào)函數(shù)之間進(jìn)行分離,接著是通過(guò)異步策略來(lái)實(shí)現(xiàn)模塊加載與回調(diào)函數(shù)之間進(jìn)行分離
    2012-08-08
  • javascript事件冒泡和事件捕獲詳解

    javascript事件冒泡和事件捕獲詳解

    最近在學(xué)習(xí)javascript中遇到了一些困難,比如冒泡和捕獲,很多次被提到,但又不知究竟應(yīng)用在何處。找到了一些好文章解惑,在這里分享給大家。
    2015-05-05
  • typeScript中數(shù)組類型定義及應(yīng)用詳解

    typeScript中數(shù)組類型定義及應(yīng)用詳解

    相信大家應(yīng)該都知道ts只允許數(shù)組中包括一種數(shù)據(jù)類型的值,下面這篇文章主要給大家介紹了關(guān)于typeScript中數(shù)組類型定義及應(yīng)用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • JS+CSS實(shí)現(xiàn)滾動(dòng)數(shù)字時(shí)鐘效果

    JS+CSS實(shí)現(xiàn)滾動(dòng)數(shù)字時(shí)鐘效果

    本篇文章教給大家用JS代碼配合CSS樣式來(lái)實(shí)現(xiàn)滾動(dòng)時(shí)鐘的動(dòng)畫(huà)效果,一起來(lái)學(xué)習(xí)下。
    2017-12-12
  • Javascript動(dòng)畫(huà)效果(4)

    Javascript動(dòng)畫(huà)效果(4)

    這篇文章主要為大家詳細(xì)介紹了第四篇Javascript動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論

屏南县| 安化县| 南木林县| 潮州市| 肥城市| 教育| 怀安县| 大田县| 杨浦区| 巫山县| 库尔勒市| 石门县| 通化市| 策勒县| 金平| 独山县| 筠连县| 高雄市| 汽车| 株洲县| 台南市| 兰州市| 界首市| 洛隆县| 任丘市| 长治市| 丰原市| 库尔勒市| 涞水县| 巩留县| 黄陵县| 荃湾区| 南澳县| 玉门市| 长岛县| 博客| 盘锦市| 玉环县| 平江县| 资源县| 南郑县|