按需引入和Treeshaking的區(qū)別

按需引入是在babel編譯過(guò)程中,按需只引入相關(guān)代碼。
tree shaking是在webpack打包階段,移除 JavaScript 上下文中的未引用代碼。

以vant組件庫(kù)為例

如果全量引入

// src/main.js
// ...
import Vant from 'vant';
import 'vant/lib/index.css';
const { Button } = Vant
Vue.component(Button.name, Button)
// ...

那么打包后的體積


全量引入

如果使用按需引入

// src/main.js
// ...
import { Button } from 'vant';
Vue.component(Button.name, Button)
// ...
// babel.config.js
// ...
  plugins: [
    [
      'import',
      {
        libraryName: 'vant',
        libraryDirectory: 'es',
        // 指定樣式路徑
        style: (name) => `${name}/style/less`,
      },
      'vant',
    ],
  ]
// ...

那么打包后的體積


按需引入

其本質(zhì)是在babel編譯階段將部分代碼做了替換

// 被替換的代碼
// import { Button } from 'vant';
// Vue.component(Button.name, Button)

// 替換為如下代碼
import "vant/es/button/style/less";
import _Button from "vant/es/button";
Vue.component(_Button.name, _Button);

tree shaking

如果我們?nèi)稳贿@么寫(xiě)

// // src/main.js
import { Button } from 'vant';
Vue.component(Button.name, Button)

同時(shí)注釋掉babel.config.js的按需加載部分

  // plugins: [
  //   [
  //     'import',
  //     {
  //       libraryName: 'vant',
  //       libraryDirectory: 'es',
  //       // 指定樣式路徑
  //       style: (name) => `${name}/style/less`,
  //     },
  //     'vant',
  //   ],
  // ]

打包后結(jié)果如下


tree-shaking
  1. 沒(méi)有css文件,因?yàn)槲覀儽緛?lái)就沒(méi)有引入css文件
  2. js的體積沒(méi)什么變化。和想象中的不一樣,沒(méi)有了按需加載,應(yīng)該會(huì)把全部的js都引入進(jìn)來(lái)。
    因?yàn)閣ebpack4默認(rèn)開(kāi)啟了treeshaking這個(gè)功能,[webpack官方解釋]
    webpack官網(wǎng)解釋

    (https://www.webpackjs.com/guides/tree-shaking/)
    查看vant的package.json文件,確實(shí)也配置了sideEffects
// node_modules/vant/package.json
// ...
  "sideEffects": [
    "es/**/style/*",
    "lib/**/style/*",
    "*.css",
    "*.less"
  ],
// ...

如果我們把上面這段刪除,再次打包


刪除sideEffects后

js部分又變成全量打包了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容